2016-08-20 66 views
2

这是一个与Vapor ValidationSuite和Validator相关的Swift Vapor问题。蒸气验证器

我的类有一个名称变量。我曾经声明名称是一个字符串。但我想在这个领域进行验证。所以我继承了经验证的Name字段的属性。请参阅以下示例代码。

class Name: ValidationSuite { 
static func validate(input value: String) throws { 
let evaluation = OnlyAlphanumeric.self 
    && Count.min(5) 
    && Count.max(20) 
    try evaluation.validate(input: value) 
    } 
} 

以下代码显示我的班级。有趣的点;它继承自Model类(因为它连接到数据库),并使用一个Node作为ID。你可以看到我声明了name变量以符合Name类型。

final class LedgerUser: Model { 
var id: Node? 
var name: Name 

这会产生一对“表达式类型不明确,没有更多上下文”。我猜它与Node从mySQL数据库中检索一个字符串有关,而且不知道如何将它转换为Name类型?

回答

1

感谢@Tanner。

对于那些遇到同样问题的人 - 当你实例化你的类时,你只需传入整个请求对象。在以下示例中,请看shoprequest。这是我错了。蒸气对你来说很重要。例如:

drop.post("shop")  { shoprequest in 

guard let name = shoprequest.data["name"].string else { 
    throw Abort.custom(status: .badRequest, message: "Please enter a shop") 
} 

do { 
    var coffeeshop = try CoffeeShop(request: shoprequest) 
} 
catch let error as ValidationErrorProtocol { 
    print(error.message) 
    throw Abort.custom(status: .badRequest, message: "Please check your coffee shop name") 
} 

return "You were a good coffee shop name." 
} 

因此,当您尝试实例化CoffeeShop对象时,它会根据您的规则对其进行验证。

class CoffeeShop { 
var name: Valid<Name> 

init(request: Request) throws { 
    name = try request.data["name"].validated() 
} 
}