Symfony \ Component \ HttpKernel \ Exception \ NotFoundHttpException Laravel

时间:2014-05-11 14:36:42

标签: php laravel laravel-4

我正在尝试使用RESTful控制器。这是我的Route.php

Route::resource('test', 'TestController');
Route::get('/', function()
{
    return View::make('hello');
});

这是我的TestController.php

<?php
class TestController extends \BaseController {

    /**
     * Display a listing of the resource.
     *
     * @return Response
     */
    public function index()
    {
            return View::make('test.home');
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return Response
     */
    public function create()
    {
            //
    }

    /**
     * Store a newly created resource in storage.
     *
     * @return Response
     */
    public function store()
    {
            //
    }

    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return Response
     */
    public function show($id)
    {
            //
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return Response
     */
    public function edit($id)
    {
            //
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  int  $id
     * @return Response
     */
    public function update($id)
    {
            //
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return Response
     */
    public function destroy($id)
    {
            //
    }
}

我的应用路由为localhost/Test/public/,并显示“您已到达”消息。但当我尝试localhost/Test/public/test它给了我“Symfony \ Component \ HttpKernel \ Exception \ NotFoundHttpException”

这是我的日志:

[2014-05-11 14:29:59] production.ERROR: NotFoundHttpException Route: `http://localhost/Test/public/test` [] []
[2014-05-11 14:29:59] production.ERROR: exception 'Symfony\Component\HttpKernel\Exception\NotFoundHttpException' in C:\wamp\www\test\bootstrap\compiled.php:5289
Stack trace:
#0 C:\wamp\www\test\bootstrap\compiled.php(4663): Illuminate\Routing\RouteCollection->match(Object(Illuminate\Http\Request))
#1 C:\wamp\www\test\bootstrap\compiled.php(4651): Illuminate\Routing\Router->findRoute(Object(Illuminate\Http\Request))
#2 C:\wamp\www\test\bootstrap\compiled.php(4643): Illuminate\Routing\Router->dispatchToRoute(Object(Illuminate\Http\Request))
#3 C:\wamp\www\test\bootstrap\compiled.php(698): Illuminate\Routing\Router->dispatch(Object(Illuminate\Http\Request))
#4 C:\wamp\www\test\bootstrap\compiled.php(679): Illuminate\Foundation\Application->dispatch(Object(Illuminate\Http\Request))
#5 C:\wamp\www\test\bootstrap\compiled.php(1136): Illuminate\Foundation\Application->handle(Object(Illuminate\Http\Request), 1, true)
#6 C:\wamp\www\test\bootstrap\compiled.php(7218): Illuminate\Http\FrameGuard->handle(Object(Illuminate\Http\Request), 1, true)
#7 C:\wamp\www\test\bootstrap\compiled.php(7815): Illuminate\Session\Middleware->handle(Object(Illuminate\Http\Request), 1, true)
#8 C:\wamp\www\test\bootstrap\compiled.php(7762): Illuminate\Cookie\Queue->handle(Object(Illuminate\Http\Request), 1, true)
#9 C:\wamp\www\test\bootstrap\compiled.php(10768): Illuminate\Cookie\Guard->handle(Object(Illuminate\Http\Request), 1, true)
#10 C:\wamp\www\test\bootstrap\compiled.php(640): Stack\StackedHttpKernel->handle(Object(Illuminate\Http\Request))
#11 C:\wamp\www\test\public\index.php(49): Illuminate\Foundation\Application->run()
#12 {main} [] []

我知道这个问题已被多次询问过。我经历了很多相关的线程,但却无法弄清楚解决方案。

12 个答案:

答案 0 :(得分:13)

Laravel中的NotFoundHttpException例外始终意味着无法为特定网址找到路由器。在您的情况下,这可能是您的Web服务器配置,虚拟主机(站点)配置或.htaccess配置中的问题。

您的公开/ .htaccess应如下所示:

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews
    </IfModule>

    RewriteEngine On

    # Redirect Trailing Slashes...
    RewriteRule ^(.*)/$ /$1 [L,R=301]

    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>

正如您所看到的那样,第一行IfModule mod_rewrite.c中存在条件,因此如果您没有安装或启用mode_rewrite,则所有重写规则都将失败并且

localhost/Test/public/

工作正常,但不是这样:

localhost/Test/public/test

另一方面,这个也应该有用,因为这是它的原始形式:

localhost/Test/public/index.php/test

因为Laravel需要重写它才能工作。

请注意,您不应该使用/ public,您的网址应如下所示:

localhost/Test/

这是另一个线索,即您的虚拟主机的文档根目录未正确配置或未指向/ var / www / Test / public,或者您的应用程序所在的任何路径。

所有这些假设您使用的是Apache 2。

答案 1 :(得分:2)

在我的web.php如下之前

Route::group(['prefix' => 'admin', 'middleware' => ['role:admin']], function() { Route::resource('roles','Admin\RoleController'); Route::resource('users','Admin\UserController'); });

在URL中输入

  

http://127.0.0.1:8000/admin/roles

,并得到相同的错误。解决方案是:

Route::group(['middleware' => ['role:admin']], function() {
  Route::resource('roles','Admin\RoleController');
  Route::resource('users','Admin\UserController');
});

删除“ prefix” =>“ admin”,因为两个Controller都位于Admin文件夹中

答案 2 :(得分:0)

我发现了另一种可能发生此错误的情况,并且一次没有重写的任何内容。这是一个非常讨厌的错字:)

我有:

Route::get('replicas/item/{id}/{?stub}', ['uses' => 'ProductReplicasController@productview', 'as' => 'database.replicas.productview']);

查看导致此错误的{?stub},它需要{stub?}偏离正轨。但如果你是Laravel的新手(和我一样),那很容易错过,可能需要相当长的时间才能搞清楚。 :)

答案 3 :(得分:0)

当一个项目正在运行时,我得到了相同的错误异常但是同一个localhost上的同一个.htaccess文件的另一个项目无效。事实证明,因为我的项目目录中有大写字母,所以URL也应该是用于路由工作的资本。 W strong的 localhost / minorweb / public / account 无效,但 localhost / minorWeb / public / account 正在运行。 所以,如果似乎没有解决问题,检查您的URL是否与项目目录匹配。

答案 4 :(得分:0)

像Arjan Koole说的那样,我有类似的错误

使用:

Route::get('/performance/{$submit_type}/{$send_selected}/{$date_a}/{$date_b}', 'PerformanceController@calc');

而不是

Route::get('/performance/{submit_type}/{send_selected}/{date_a}/{date_b}', 'PerformanceController@calc');

所以当你使用{$ stuff}

时要注意

答案 5 :(得分:0)

在我的情况下,问题是我使用了额外的前缀斜杠,例如:

Route::get('/plans', 'PayPalController@getPlansList')->name('paypal.plans');

而不是:

Route::get('plans', 'PayPalController@getPlansList')->name('paypal.plans');

答案 6 :(得分:0)

将其放入根.htaccess文件中

以下代码可完成三件事:

  1. 从网址中删除 index.php
  2. 从网址中删除公开
  3. 解决您的问题。

注意:RewriteRule ^ index.php [L]此代码解决了您的问题,我的问题未在[L]之后添加index.php

RewriteEngine On
<IfModule mod_rewrite.c>
 #Session timeout

<IfModule mod_negotiation.c>
    Options -MultiViews
</IfModule>

   Options +FollowSymlinks
   RewriteEngine On

   # Redirect Trailing Slashes...
   RewriteRule ^(.*)/$ /$1 [L,R=301]

RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ ^$1 [N]

RewriteCond %{REQUEST_URI} (\.\w+$) [NC]
RewriteRule ^(.*)$ public/$1

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]


</IfModule>

答案 7 :(得分:0)

就我而言: 我不得不使用 POST 方法,但我在 GET!

中使用了 web.php Rout 方法

答案 8 :(得分:0)

就我而言,我在路由中放置了 {$id} 而不是 {id}

答案 9 :(得分:0)

我遇到过这种情况。我检查了我所有的代码,我的解决方案是:

php artisan route:cache

因为我忘记清除路由缓存了。

答案 10 :(得分:-1)

在我的情况下,问题是我在邮递员中打错了路线。

错误的路由:http:// localhost:8000 / methodName

正确的路由:http:// localhost:8000 / api / methodName

我忘记添加“ / api”。

答案 11 :(得分:-2)

要检查的另一件事是你的文档根目录,

我是:

WWW / VAR

应该是:

WWW的/ var / mysite的/公共

我讨厌网页开发的另一个原因