Мне нужно отображать сообщения в зависимости от типа исключения в моем собственном представлении '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);
}
Извините, я имел ввиду http, свою ошибку. ModelNotFoundException - исключение Eloquent на стороне сервера. Laravel не отображает исключения, которые не являются экземплярами HttpException, поэтому я преобразовал его.
Смотрите мой ответ ниже. Да, с вами все будет в порядке






Это просто для того, чтобы вы могли установить правильный код состояния?
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);
}
Отображение исключения - хорошая идея в режиме разработки. Программистам особенно полезно иметь возможность видеть исключение во время выполнения, однако ваши пользователи в целом мало что поймут, когда им показывают исключение, и очень немногие пользователи, которые их понимают, могут использовать его против вас.
На мой взгляд, лучший подход - показать исключение доверенным разработчикам, а страницу с ошибкой общего назначения / представление / всплывающее окно / экран для пользователей в целом, поэтому преобразовать проблему в исключение только для вашей команды и преобразовать проблему в понятный текст. в случае пользователей.
Во-первых, ненайденные исключения должны иметь код статуса http 404. Во-вторых, зачем вам нормальное исключение? Я полагаю, вы обслуживаете HTML через HTTP (S), поэтому исключение HTML должно быть в порядке? Если вы не хотите его преобразовывать, зачем его преобразовывать?