В моем приложении Laravel есть две группы маршрутов: одна для API, а другая для самого веб-сайта. Я добавил следующий код в global.php
для обработки ошибок моего API.
App::error(function(ModelNotFoundException $e)
{
return Response::json('', 404);
});
Но не это, очевидно, также влияет на мой обычный веб-сайт, где я хочу вернуть нормальный вид, когда ModelNotFoundException
происходит. Вот так:
App::error(function(ModelNotFoundException $e)
{
return Response::view('404.html', [], 404);
});
Как настроить разные обработчики ошибок для разных групп маршрутов?
Я думаю, что вам не нужно заботиться о том, какая часть сайта выдает ошибку, а вместо этого отвечать любым форматом клиента запрошенный. В общем, это установлено в Accepts
заголовок запроса и может быть доступен в Laravel:
if (Request::format() == 'json')
{
//
}
(выше взято из документация)
В вашем случае это превратит вашу функцию обработки ошибок в это:
App::error(function(ModelNotFoundException $e)
{
if (Request::format() == 'json') {
return Response::json('', 404);
} else {
return Response::view('404.html', [], 404);
}
});
Это автоматически покрывает вас, если, например, вы добавляете запрос AJAX без API в основную часть вашего сайта (по какой-либо причине), который потенциально может вызвать ModelNotFoundException
, Пока ваш клиент отправляет соответствующие заголовки запроса, вы в порядке.
Вы можете попробовать изменить обстановку. Для выбранной группы вы можете изменить среду, используя:
$app->setEnvironment('enviromentname');
и создать новый environmentname.php
файл в start
каталог
Но я не знаю, сработает ли это.
Вы также можете создать переменную сеанса и в App:error
добавить код в зависимости от этой переменной сеанса:
$value = Session::get('type');
if ($value == 'onetype') {
// something
}
else {
// something else
}