我的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}
导致这种情况的原因是什么?堆栈跟踪不会显示我的代码中的任何内容。
答案 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_contents
或curl
,则可能正在调用不存在的路由然后抛出该异常。
如果您无法控制下载后台作业的网址,则可能会尝试提取127.0.0.1
,localhost
等类似网址。
答案 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"。
可能对某人有用。