我的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 :(得分:0)
您可以尝试改变环境。对于选定的组,您可以使用以下方式更改环境:
$app->setEnvironment('enviromentname');
并在environmentname.php
目录
start
文件
但我不知道它是否会奏效。
您还可以创建会话变量,并在App:error
中添加代码,具体取决于此会话变量:
$value = Session::get('type');
if ($value == 'onetype') {
// something
}
else {
// something else
}
答案 1 :(得分:0)
我认为您不应该关心网站的哪个部分会引发错误,而是以客户请求的任何格式进行响应。通常,这是在请求的Accepts
标头中设置的,可以通过以下方式在Laravel中访问:
if (Request::format() == 'json')
{
//
}
(以上摘自documentation)
在您的情况下,这会将您的错误处理功能转换为:
App::error(function(ModelNotFoundException $e)
{
if (Request::format() == 'json') {
return Response::json('', 404);
} else {
return Response::view('404.html', [], 404);
}
});
例如,如果您向网站的主要部分(无论出于何种原因)添加非API AJAX请求,可能会触发ModelNotFoundException
,则会自动为您提供此保护。只要您的客户端发送了相应的请求标头,您就会很好。