Respect Validation - возврат одной ошибки

Я использую https://github.com/Respect/Validation/. Можно ли вернуть одну ошибку вместо пакета ошибок?

Тока я могу получить первую ошибку, используя следующее:

public function checkUsername(Request $request, Response $response, $args = [])
{
    $body = $request->getParsedBody();
    $usernameValidator = v::key('username', v::alnum()->length(3, 10));

    /*
     * Validate the username
     */
    try
    {
        $usernameValidator->assert($_POST);
    }
    catch(NestedValidationException $e)
    {
        $errors = $e->findMessages([
            'alnum' => 'username must contain only letters and digits',
            'length' => 'username must be between 3 and 10 characters',
            'required' => 'A valid username is required'
        ]);

        $errors = array_values(array_filter($errors, function($error) {
            return !empty($error);
        }));

        throw new AppException($errors[0]);
    }

    /*
     * Find user by username. If $user is empty no user exists
     */
    $user = $this->userRepo->findByUsername($body['username']);

    return $response->withJson([
        'success' => true,
        'data' => [
            'username' => $body['username'],
            'available' => empty($user)
        ],
        'message' => null
    ]);
}

Делать это каждый раз, когда мне нужно проверить, будет сложно.

Я надеюсь, что в валидационной библиотеке есть метод для возврата одной ошибки. Если нет, то мне, вероятно, придется изучить расширение класса, чтобы создать метод, который сделает то же самое.

Есть идеи?

1 ответ

http://respect.github.io/Validation/docs/index.html

Мы видели validate(), который возвращает true или false, и assert(), который генерирует полный отчет о проверке. Существует также метод check(), который возвращает исключение только с первой найденной ошибкой:

use Respect\Validation\Exceptions\ValidationException;

try {
    $usernameValidator->check('really messed up screen#name');
} catch(ValidationException $exception) {
    echo $exception->getMainMessage();
}
Другие вопросы по тегам