我是Laravel的新手,我正在尝试捕获与现有路线不匹配的任何请求。目前我正在接受......
Symfony \ Component \ HttpKernel \ Exception \ NotFoundHttpException
我在App::missing()
中创建了一个app/start/global.php
处理程序,如on the documentation page所述,但这没有帮助。我也试过创建一个App::error(function(NotFoundHttpException $exception, $code)
处理程序,但这也没有帮助。
任何帮助都将不胜感激。
答案 0 :(得分:20)
你需要这个:在'app / start / global.php'中添加:
App::missing(function($exception)
{
return Response::view('errorView', array(), 404);
});
当然,在视图中创建(在本例中)errorView.blade.php
编辑:此方法处理所有“404 Not Found”错误。
答案 1 :(得分:3)
这可能是由于在app/config/app.php
文件中打开了调试。尝试将该值转换为false
并查看您的自定义处理程序是否“处理”它。
此外,您的错误处理程序需要返回一个响应以“短路”请求并实际响应您的错误处理程序的结果 - 您是否从App::error()
处理程序返回值/ Response类? (请告诉我们该代码)。
以下是关于Laravel 4 Error Handling的文章,但没有概述Laravel在发生错误时如何使用App::missing()
和App::error()
处理程序的过程。
特别注意“处理程序类的内容”部分 - 它概述了如何从处理程序返回某种值,以便它不会将异常传递给下一个处理程序(可能是你的Whoops错误在debug
中将true
设置为app/config/app.php
时显示的输出。
答案 2 :(得分:3)
以下是发生ModelNotFoundException时抛出404错误的方法
App::error(function(Illuminate\Database\Eloquent\ModelNotFoundException $exception, $code)
{
return Response::view('errors.404', array(), 404);
});
答案 3 :(得分:1)
in
如果你做
'debug' => true,
到这个
'debug' => false,
您将获得除调试模式之外的用户体验环境。请确保您已经检查过。
谢谢:)
答案 4 :(得分:0)
我能够使用以下代码使其工作。我让调试' =>是的,在我的本地配置中。
在app / start / global.php
中App::error(function(Symfony\Component\HttpKernel\Exception\NotFoundHttpException $exception)
{
Log::error($exception);
$response = Response::make(View::make('response')
->with('data', null)
->with('meta', 'Error, incorrect path')
->with('pagination', null));
$response->setStatusCode(404);
$response->header('content-type', 'application/json', true);
return $response;
});
如果有兴趣,我的观点内容是
<?php
echo json_encode(array(
'data' => $data,
'pagination' => $pagination,
'meta' => $meta), JSON_PRETTY_PRINT);
?>
主要挑战是使用Symfony \ Component \ HttpKernel \ Exception \ NotFoundHttpException作为Exception的类型,而不仅仅是NotFoundHttpException。
通过使用NotFoundHttpException,抛出了500错误。