Laravel 4异常:NotFoundHttpException

时间:2013-04-05 20:47:24

标签: php symfony laravel laravel-4

我的Laravel 4应用程序日志有时会显示NotFoundHttpException

exception 'Symfony\Component\HttpKernel\Exception\NotFoundHttpException' in /var/www/laravel4/bootstrap/compiled.php:7420
Stack trace:
#0 /var/www/laravel4/bootstrap/compiled.php(7137): Illuminate\Routing\Router->handleRoutingException(Object(Symfony\Component\Routing\Exception\ResourceNotFoundException))
#1 /var/www/laravel4/bootstrap/compiled.php(7113): Illuminate\Routing\Router->findRoute(Object(Illuminate\Http\Request))
#2 /var/www/laravel4/bootstrap/compiled.php(958): Illuminate\Routing\Router->dispatch(Object(Illuminate\Http\Request))
#3 /var/www/laravel4/bootstrap/compiled.php(946): Illuminate\Foundation\Application->dispatch(Object(Illuminate\Http\Request))
#4 /var/www/laravel4/public/index.php(49): Illuminate\Foundation\Application->run()
#5 {main}

导致这种情况的原因是什么?堆栈跟踪不会显示我的代码中的任何内容。

6 个答案:

答案 0 :(得分:25)

NotFoundHttpException基本上只是您应用中的404。不幸的是,异常消息甚至没有告诉您触发异常的请求的URL,这使得在日志中看到这些错误时很难理解这些错误。

为了提供更多调试信息,请设置自己的404处理程序。这是一个简单的处理程序,它将记录URL(因此您知道请求触发错误的内容)和用户代理(以帮助您确定发出请求的人或者是什么)并返回视图和404代码:

App::missing(function($e) {
    $url = Request::fullUrl();
    $userAgent = Request::header('user-agent');
    Log::warning("404 for URL: $url requested by user agent: $userAgent");
    return Response::view('errors.not-found', array(), 404);
});

将其放入app/start/global.php

答案 1 :(得分:3)

我遇到了这个问题,因为我将父目录的名称大写,并且没有在URL中将其大写。这就是我收到错误的原因。

我正在使用这个网址 的本地主机/ laravel / todo2 /公共/富 事实上,如果我输入的是: 的本地主机/ Laravel / todo2 /公共/ 但如果我在公众之后键入任何内容/它会给出错误。

如果我用Laravel大写的话 localhost / Laravel / todo2 / public / foo

公共/可行的路线

答案 2 :(得分:1)

在不知道你的代码的情况下,很难肯定是什么导致这种情况。查看错误的堆栈跟踪,很明显路由器正在调度它,我猜它与后台作业本身无关,而是与它调用的API无关。

在您的特定情况下,异常是在ResourceNotFoundException之后抛出,当没有为此类URL模式定义路由时发生。

可能出现的问题:

如果后台作业在您自己的API上执行file_get_contentscurl,则可能正在调用不存在的路由然后抛出该异常。

如果您无法控制下载后台作业的网址,则可能会尝试提取127.0.0.1localhost等类似网址。

答案 3 :(得分:1)

我的项目位于 C:\ xampp \ htdocs \ ColorTex

键入

我收到此错误

http://localhost/myproject/public/image

而不是

http://localhost/MyProject/public/image

我在Windows中,所以我认为它会忽略大写,但是......

小心。

答案 4 :(得分:1)

您可以从日志文件中过滤404(NotFoundHttpException)错误。
文件位置:app / start / global.php

App::error(function(Exception $exception, $errorCode)
{
    $requestUrl = Request::fullUrl(); 
    $userAgent = Request::header('user-agent');

    if($errorCode != 404){
        Log::error('Exception', array(
            'errorCode' => $errorCode,
            'requestUrl' => $requestUrl,
            'userAgent' => $userAgent,
            'context' => $exception,
        ));     
    }

    return Response::view('error-page-path.error-404', array(), 404);
    // Here "error-404" is a blade view file in "error-page-path" directory
});

答案 5 :(得分:0)

我收到此错误是因为我使用了method =" post"在我的形式而不是方法=" POST"。

可能对某人有用。