2015-03-07 2 views
2

Если входящий запрос был запросом AJAX, перенаправление будет . Вместо этого ответ HTTP с кодом состояния 422 будет , возвращенный браузеру, содержащему JSON-представление ошибок проверки .Где laravel 5 обрабатывает исключение ValidationException?

Это не работает! Я пытаюсь получить доступ к маршруту через запрос ajax и перенаправляет его обратно.

Если проверка прошла, ваш код будет продолжать работать нормально. Однако, если проверка не выполняется, будет выбрано Illuminate \ Contracts \ Validation \ ValidationException. Это исключение автоматически захватывается, и перенаправление создается в предыдущем местоположении пользователя. Ошибки проверки даже автоматически мигают на сеанс!

Теперь я хочу знать, где laravel улавливает это исключение, чтобы я мог его изменить?

+0

Вы делаете это внутри контроллера или формы? – Laurence

+0

@TheShiftExchange Я делаю это в FormValidation –

ответ

0

Это обрабатывается внутри класса СформироватьЗапроса:

protected function failedValidation(Validator $validator) 
{ 
    throw new HttpResponseException($this->response(
     $this->formatErrors($validator) 
    )); 
} 

Вы можете переопределить эту функцию в своем собственном объекте запроса и обрабатывать не прошли проверку так, как вам нравится.

+1

Тем не менее, в документации говорится, что это поведение будет выполняться каркасом. Разве это не ошибка? –

0

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

@Faiz, вы технически не должны меняться, если вы хотите придерживаться поведения laravel (я всегда буду стараться следовать рекомендациям Тейлора). Итак, чтобы получить статус кода ответа 422, вам необходимо сообщить phpunit, вы отправите XMLHttpRequest. Тем не менее, это работает на Laravel 5

 $response = $this->call('POST', $url, [], [], [], 
     ['HTTP_X_Requested-With' => 'XMLHttpRequest']); 

Больше информации на Github Issues. Кроме того, если вы посмотрите на Symfony\Component\HttpFoundation\[email protected], вы увидите, что этот заголовок используется в «общих фреймворках JavaScript» и относится к this link

Еще не проверял в браузере, но я думаю, что это тоже должно работать.

Смежные вопросы