Пользовательская страница ошибки не отображается на Laravel 5

Я пытаюсь отобразить страницу пользовательских ошибок вместо сообщения Laravel 5 по умолчанию:

"Упс, похоже, что-то пошло не так"

Я сделал много поиска, прежде чем публиковать здесь, я пробовал это решение, которое должно работать на Laravel 5, но ему не повезло: https://laracasts.com/discuss/channels/laravel/change-whoops-looks-like- что – то-пошли-неправильно-страница

Вот точный код, который у меня есть в файле app/Exceptions/Handler.php :

 <?php namespace App\Exceptions; use Exception; use View; use Bugsnag\BugsnagLaravel\BugsnagExceptionHandler as ExceptionHandler; class Handler extends ExceptionHandler { protected $dontReport = [ 'Symfony\Component\HttpKernel\Exception\HttpException' ]; public function report(Exception $e) { return parent::report($e); } public function render($request, Exception $e) { return response()->view('errors.defaultError'); } } 

Но вместо отображения моего пользовательского представления отображается пустая страница. Я также попытался использовать этот код внутри функции render()

 return "Hello, I am an error message"; 

Но я получаю тот же результат: пустая страница

Solutions Collecting From Web of "Пользовательская страница ошибки не отображается на Laravel 5"

Вместо ответа создайте маршрут для своей страницы ошибок в вашем Routes.php с именем «errors.defaultError». например

 route::get('error', [ 'as' => 'errors.defaultError', 'uses' => 'ErrorController@defaultError' ]); 

Либо создайте контроллер, либо включите функцию в маршрут с помощью

 return view('errors.defaultError'); 

и вместо этого используйте перенаправление. Например

 public function render($request, Exception $e) { return redirect()->route('errors.defaultError'); } 

Я полностью согласен со всеми, кто хочет настроить ошибки в Laravel, чтобы их пользователи никогда не видели смущающего сообщения, такого как «Упс, похоже, что что-то пошло не так».

Мне потребовалось время, чтобы понять это.

Как настроить сообщение «Упс» в Laravel 5.3

В app/Exceptions/Handler.php замените всю функцию prepareResponse следующим образом:

 protected function prepareResponse($request, Exception $e) { if ($this->isHttpException($e)) { return $this->toIlluminateResponse($this->renderHttpException($e), $e); } else { return response()->view("errors.500", ['exception' => $e]); //By overriding this function, I make Laravel display my custom 500 error page instead of the 'Whoops, looks like something went wrong.' message in Symfony\Component\Debug\ExceptionHandler } } 

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

В /resources/views/errors создайте 500.blade.php .

Вы можете написать любой текст, который вы хотите там, но я всегда рекомендую хранить страницы ошибок очень простые (чистый HTML и CSS и ничего необычного), так что есть почти нулевая вероятность того, что они сами вызовут дополнительные ошибки.

Чтобы проверить, что это работает

В routes/web.php вы можете добавить:

 Route::get('error500', function () { throw new \Exception('TEST PAGE. This simulated error exception allows testing of the 500 error page.'); }); 

Затем я mysite.com/error500 к mysite.com/error500 и посмотрю, видите ли вы свою настроенную страницу ошибок.

Затем также перейдите на mysite.com/some-nonexistent-route и посмотрите, все ли у вас есть страница 404, которую вы настроили, если у вас ее есть.

В laravel 5.4 вы можете поместить этот блок кода внутри функции рендеринга в Handler.php – найти в приложении / исключениях / Handler.php

  //Handle TokenMismatch Error/session('csrf_error') if ($exception instanceof TokenMismatchException) { return response()->view('auth.login', ['message' => 'any custom message'] ); } if ($this->isHttpException($exception)){ if($exception instanceof NotFoundHttpException){ return response()->view("errors.404"); } return $this->renderHttpException($exception); } return response()->view("errors.500"); //return parent::render($request, $exception); 

Типичный способ сделать это – просто создать отдельные представления для каждого типа ошибки .

Мне нужна динамическая страница пользовательских ошибок (поэтому все ошибки попадают в один и тот же шаблон клипа).

В Handler.php я использовал:

 public function render($request, Exception $e) { // Get error status code. $statusCode = method_exists($e, 'getStatusCode') ? $e->getStatusCode() : 400; $data = ['customvar'=>'myval']; return response()->view('errors.index', $data, $statusCode); } 

Тогда мне не нужно создавать 20 страниц ошибок для каждого возможного кода состояния ошибки HTTP.

У меня две страницы ошибок – 404.blade.php & generic.blade.php

Я хотел:

  • 404 страница для показа всех недостающих страниц
  • Страница исключения для исключений в разработке
  • Страница общей ошибки для исключений в производстве

Я использую .env – APP_DEBUG, чтобы решить это.

Я обновил метод рендеринга в обработчике исключений:

приложение / исключения / handler.php

 public function render($request, Exception $e) { if ($e instanceof ModelNotFoundException) { $e = new NotFoundHttpException($e->getMessage(), $e); } if ($this->isUnauthorizedException($e)) { $e = new HttpException(403, $e->getMessage()); } if ($this->isHttpException($e)) { // Show error for status code, if it exists $status = $e->getStatusCode(); if (view()->exists("errors.{$status}")) { return response()->view("errors.{$status}", ['exception' => $e], $status); } } if (env('APP_DEBUG')) { // In development show exception return $this->toIlluminateResponse($this->convertExceptionToResponse($e), $e); } // Otherwise show generic error page return $this->toIlluminateResponse(response()->view("errors.generic"), $e); } 

на Larvel 5.2 на вашем app/exceptions/handler.php просто расширьте этот метод renderHttpException то есть добавьте этот метод в handler.php настройте, как хотите

 /** * Render the given HttpException. * * @param \Symfony\Component\HttpKernel\Exception\HttpException $e * @return \Symfony\Component\HttpFoundation\Response */ protected function renderHttpException(HttpException $e) { // to get status code ie 404,503 $status = $e->getStatusCode(); if (view()->exists("errors.{$status}")) { return response()->view("errors.{$status}", ['exception' => $e], $status, $e->getHeaders()); } else { return $this->convertExceptionToResponse($e); } }