Как отобразить 500 ошибок с пользовательским сообщением? - PullRequest
0 голосов
/ 10 сентября 2018

Мне нужно отображать сообщения в зависимости от типа исключения в моем собственном представлении 'errors.500'. Я сделал следующее решение в классе Handler, которое до сих пор работает, но я боюсь, что это не совсем правильно, потому что оно преобразует исключение типа сервера в тип http. Может ли это вызвать какую-либо опасность? Какой подход лучше?

public function render($request, Exception $exception)
{

    if ($exception instanceof FatalErrorException) {
        $exception = new HttpException(500, "Server error");
    }

    if ($exception instanceof ModelNotFoundException) {
       $exception = new HttpException(500, "Model not found");
    }

    if ($exception instanceof RelationNotFoundException) {
        $exception = new HttpException(500, "Relation not found");
    }
    return parent::render($request, $exception);
}

Ответы [ 2 ]

0 голосов
/ 10 сентября 2018

Показывать исключение - хорошая идея в режиме разработки. Для программистов особенно полезно видеть исключение во время выполнения, однако ваши пользователи в целом мало что поймут, когда им будет показано Исключение, и очень немногие пользователи, которые его понимают, могут использовать его против вас.

На мой взгляд, лучший подход - показать исключение доверенным разработчикам и страницу с ошибками общего назначения / view / popup / screen для пользователей в целом, поэтому преобразовать проблему в исключение только для вашей команды и преобразовать проблему в дружественный текст в случае пользователей.

0 голосов
/ 10 сентября 2018

Это просто, чтобы вы могли установить правильный код состояния?

public function render($request, Exception $exception)
{
    if ($exception instanceof FatalErrorException) {
        $code = 500;
    }

    if ($exception instanceof ModelNotFoundException) {
       $code = 404;
    }

    if ($exception instanceof RelationNotFoundException) {
        $code = 404;
    }
    $exception = new HttpException($exception->getMessage(), $code, $exception->getFile(), $exception->getLine());
    return parent::render($request, $exception);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...