Добавить пользовательскую страницу ошибок 500 только для производства в Laravel
Я хочу иметь пользовательскую страницу ошибок 500. Это можно сделать, просто создав представление в errors/500.blade.php
.
это нормально для производственного режима, но я больше не получаю страницы исключений/ отладки по умолчанию, когда в режиме отладки (тот, который выглядит серым и говорит "что-то пошло не так").
поэтому мой вопрос: как я могу иметь пользовательскую страницу ошибок 500 для производства, но исходную страницу ошибок 500, когда режим отладки истинен?
4 ответов
Я нашел лучший способ решить мою проблему, это добавить следующие функции App\Exceptions\Handler.php
protected function renderHttpException(HttpException $e)
{
if ($e->getStatusCode() === 500 && env('APP_DEBUG') === true) {
// Display Laravel's default error message with appropriate error information
return $this->convertExceptionToResponse($e);
}
return parent::renderHttpException($e); // Continue as normal
}
лучшие решения приветствуются!
просто добавьте этот код в \App\Exceptinons\Handler.на PHP:
public function render($request, Exception $exception)
{
// Render well-known exceptions here
// Otherwise display internal error message
if(!env('APP_DEBUG', false)){
return view('errors.500');
} else {
return parent::render($request, $exception);
}
}
или
public function render($request, Exception $exception)
{
// Render well-known exceptions here
// Otherwise display internal error message
if(app()->environment() === 'production') {
return view('errors.500');
} else {
return parent::render($request, $exception);
}
}
добавить код внутри Handler
класс:
protected function convertExceptionToResponse(Exception $e)
{
if (config('app.debug')) {
return parent::convertExceptionToResponse($e);
}
return response()->view('errors.500', [
'exception' => $e
], 500);
}
на convertExceptionToResponse
метод получает право на такие ошибки, которые вызывают состояние 500.
добавьте этот код в app/Exceptions/Handler.php
, render
метод. Я думаю, это просто и понятно. Предполагая, что у вас есть пользовательская страница ошибки 500.
public function render($request, Exception $e) {
if ($this->isHttpException($e)) {
return $this->toIlluminateResponse($this->renderHttpException($e), $e);
} elseif (!config('app.debug')) {
return response()->view('errors.500', [], 500);
} else {
// return $this->toIlluminateResponse($this->convertExceptionToResponse($e), $e);
return response()->view('errors.500', [], 500);
}
}
используйте строку комментариев, когда вам нужно по умолчанию упс страница ошибки для отладки. используйте другой для пользовательской страницы ошибки 500.