2016-08-20 46 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() 
} 
}