Laravel 4异常:NotFoundHttpException

Nyx*_*nyx 12 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}
Run Code Online (Sandbox Code Playgroud)

可能是什么导致了这个?堆栈跟踪不会显示我的代码中的任何内容.

And*_*eas 25

A 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);
});
Run Code Online (Sandbox Code Playgroud)

把它放进去app/start/global.php.


vFr*_*sop 1

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

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

可能出现的问题:

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

如果您无法控制后台作业正在下载的 URL,它可能会尝试获取类似127.0.0.1localhost类似内容的 URL。