Выбросы допустимого типа Vapor 2 Validation Использование необъявленного типа Valid

Я пытаюсь использовать действительный тип Vapor 2, но компилятор говорит только: «Использование необъявленного типа действительный».

Я прочитал: https://docs.vapor.codes/2.0/validation/package/ + https://docs.vapor.codes/2.0/validation/overview/ < / а>

В моем моем Package.swift я определил

  • /vapor/vapor.git
  • /vapor/validation-provider.git
  • /fluent-provider.git

как зависимости.

Если я попытаюсь использовать Valid<SomeValidator>, компилятор скажет: «Использование необъявленного типа Valid».

Использование import Validation против import VaporValidation не имеет значения.

Есть ли у кого-нибудь идеи, как я могу заставить Valid работать?

THX за вашу помощь.

Изменить: я создал новый проект Vapor vapor new validtest --api.

Отредактировал Package.swift:

import PackageDescription

let package = Package(
    name: "validtest",
    targets: [
        Target(name: "App"),
        Target(name: "Run", dependencies: ["App"]),
    ],
    dependencies: [
        .Package(url: "https://github.com/vapor/vapor.git", majorVersion: 2),
        .Package(url: "https://github.com/vapor/validation.git", majorVersion: 1),
        .Package(url: "https://github.com/vapor/validation-provider.git", majorVersion: 1),
        .Package(url: "https://github.com/vapor/fluent-provider.git", majorVersion: 1)
    ],
    exclude: [
        "Config",
        "Database",
        "Localization",
        "Public",
        "Resources",
    ]
)

Бежали vapor fetch и vapor xcode.

В Routes.swift из примера кода я попробовал это:

import Vapor
import FluentProvider
import Validation
// or and both imports are tested
import VaporValidation

extension Droplet {
    func setupRoutes() throws {
        get("info") { req in

            let input: Valid<OnlyAlphanumeric> = try req.data["input"].validated()

Независимо от того, какой импорт я использовал, компилятор всегда говорит: «Использование необъявленного типа Valid».


person dev-affective-de    schedule 26.06.2017    source источник
comment
К сведению: VaporValidation был переименован в ValidationProvider, чтобы соответствовать другим поставкам с выпуском Validation Provider версии v1.2.0 (июль 2017 г.). VaporValidation устарел. Таким образом, import VaporValidation вместо этого будет import ValidationProvider для версии 1.2.0 или выше.   -  person l --marc l    schedule 22.10.2017


Ответы (2)


Вместо того

let input: Valid<OnlyAlphanumeric> = try req.data["input"].validated()

Валидация Vapor 2 использует

guard let input = req.data["input"]?.string else { throw SomeError }
try input.validated(by: OnlyAlphanumeric())

Если входная строка недействительна, будет выброшено ValidationError.

person tobygriffin    schedule 28.07.2017
comment
THX, это решение работает для меня. Не знаю, почему я не видел завершения кода ... - person dev-affective-de; 31.07.2017

У меня такая же проблема. Это должно работать:

.Package(url: "https://github.com/vapor/validation.git", majorVersion: 1)

...

import Validation

...

try EmailValidator().validate(email)
person Genki    schedule 27.06.2017
comment
СПАСИБО за ваш ответ. Но я стараюсь использовать тип Valid, чтобы гарантировать, что недопустимые значения не могут быть сохранены в модели данных. - person dev-affective-de; 27.06.2017