Laravel 4处理404错误

时间:2013-07-15 19:03:00

标签: laravel laravel-4

我是Laravel的新手,我正在尝试捕获与现有路线不匹配的任何请求。目前我正在接受......

  

Symfony \ Component \ HttpKernel \ Exception \ NotFoundHttpException

我在App::missing()中创建了一个app/start/global.php处理程序,如on the documentation page所述,但这没有帮助。我也试过创建一个App::error(function(NotFoundHttpException $exception, $code)处理程序,但这也没有帮助。

任何帮助都将不胜感激。

5 个答案:

答案 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

app - > config - > app.php

如果你做

'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错误。