【问题标题】:Vapor - Validator蒸汽 - 验证器
【发布时间】:2016-08-20 19:45:30
【问题描述】:

这是一个与 Vapor ValidationSuite 和 Validator 相关的 Swift Vapor 问题。

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

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 类型有关?

【问题讨论】:

    标签: validation vapor


    【解决方案1】:

    使用验证器的语法类似于Valid<Name>

    在此处查看有关常用用法的文档:https://vapor.github.io/documentation/guide/validation.html#common-usage

    以下代码应该可以工作:

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

    【讨论】:

      【解决方案2】:

      感谢@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()
      }
      }
      

      【讨论】:

        猜你喜欢
        • 2020-10-17
        • 1970-01-01
        • 1970-01-01
        • 2020-05-15
        • 1970-01-01
        • 2014-11-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多