Обработка пользовательских исключений ModelNotFoundException для каждой группы маршрутов

В моем приложении 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);
});

Как настроить разные обработчики ошибок для разных групп маршрутов?

0

Решение

Я думаю, что вам не нужно заботиться о том, какая часть сайта выдает ошибку, а вместо этого отвечать любым форматом клиента запрошенный. В общем, это установлено в 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, Пока ваш клиент отправляет соответствующие заголовки запроса, вы в порядке.

0

Другие решения

Вы можете попробовать изменить обстановку. Для выбранной группы вы можете изменить среду, используя:

$app->setEnvironment('enviromentname');

и создать новый environmentname.php файл в start каталог

Но я не знаю, сработает ли это.

Вы также можете создать переменную сеанса и в App:error добавить код в зависимости от этой переменной сеанса:

   $value = Session::get('type');

if ($value == 'onetype') {
// something
}
else {
// something else
}
0

По вопросам рекламы [email protected]