Соблюдение проверки — возврат одной ошибки

Я использую 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
    ]);
}

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

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

Любые идеи?


person BugHunterUK    schedule 28.12.2016    source источник


Ответы (1)


http://respect.github.io/Validation/docs/index.html#validation-methods

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

use Respect\Validation\Exceptions\ValidationException;

try {
    $usernameValidator->check('really messed up screen#name');
} catch(ValidationException $exception) {
    echo $exception->getMainMessage();
}
person bcmcfc    schedule 28.12.2016
comment
Можно ли по-прежнему определять пользовательские сообщения при использовании check? - person BugHunterUK; 28.12.2016