После добавления пользовательского представления для обработки исключений мои сообщения проверки больше не возвращаются, а только: «Данные данные не прошли проверку».
Я добавил следующее в handler.php и удалил оригинальный parent::render($request, $exception);
public function render($request, Exception $exception){
return response()->view('error', compact('exception'), 500);
}
Есть ли способ сохранить мои сообщения проверки и отобразить представление об ошибке, когда это не ошибка проверки, поскольку я ненавижу видеть представление по умолчанию «упс, произошла ошибка».
Если вы посмотрите немного дальше в коде parent::render()
, вы увидите строку с:
return $this->convertValidationExceptionToResponse($e, $request);
Это применяет такие функции к запросу, как withInput()
и withErrors()
.
Итак, вы можете попробовать код, похожий на этот:
public function render(...) {
return response()->view('error', ...)
->withInput(Arr::except($request->input(), $this->dontFlash))
->withErrors($exception->errors(), $exception->errorBag);
}
Я заставил это работать по назначению, чтобы сохранить мои пользовательские сообщения проверки, созданные FormRequest, которые мне пришлось добавить в мой App/Exceptions/Handler.php:
use Illuminate\Validation\ValidationException;
public function render($request, Exception $exception)
{
if ($exception instanceof ValidationException) {
return parent::render($request, $exception);
}
else{
return response()->view('error', compact('exception'), 500);
}
}