Добавить пользовательскую страницу ошибок 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.