Сбой проверки в методе FormRequest withValidator в Laravel - PullRequest
2 голосов
/ 05 августа 2020

Я создал собственный FormRequest для проверки запросов, относящихся к конкретному продукту с атрибутами. Одно из правил, конечно, состоит в том, что поле запроса product существует в базе данных products.

Однако у меня есть более сложное правило, которое необходимо проверить после. Я проверяю это правило с помощью метода withValidator, а затем выполняю:

$validator->after(function ($validator) {
    // check the extra rule
    ...
});

(Это не имеет особого значения, но это правило проверяет это, учитывая выбранные пользователем атрибуты, такие как цвет и size, это соответствует уникальному артикулу, принадлежащему продукту)

Итак, как мне вызвать сбой проверки?

Другое требование состоит в том, что, когда эта проверка не проходит, она должна возвращать 500 вместо из 422. Кроме того, он должен вернуть пользовательский ответ JSON, если этого артикула нет в наличии. Как это сделать в FormRequest?

1 Ответ

0 голосов
/ 05 августа 2020

Чтобы добавить ошибку в ловушку after, вы можете сделать это следующим образом:

$validator->after(function ($validator) {
    if (!$someCondition) {
        $validator->errors()->add('key', 'Some error message explaining error.');
    }
});

Если вы проверяете поле product, тогда «ключ» должен быть «product».

Для второго требования вы можете переопределить функцию failedValidation.

protected function failedValidation(Validator $validator)
{
    throw (new ValidationException($validator))
                ->errorBag($this->errorBag)
                ->redirectTo($this->getRedirectUrl())
                ->status(500);
}

Теперь, если вам нужно отправить собственный ответ, вы можете проверить статус 500 в своем App\Exceptions\Handler.php

public function render($request, Throwable $exception)
{
    if (is_a($exception, ValidationException::class) && $exception->getCode() === 500) {
        // Handle your custom JSON reponse
    }

    return parent::render($request, $exception);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...