Symfony\Component\HttpKernel\Exception\NotFoundHttpException Laravel

Har*_*rsh 11 php laravel laravel-4

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

Route::resource('test', 'TestController');
Route::get('/', function()
{
    return View::make('hello');
});
Run Code Online (Sandbox Code Playgroud)

这是我的 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)
    {
            //
    }
}
Run Code Online (Sandbox Code Playgroud)

我的应用路线是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} [] []
Run Code Online (Sandbox Code Playgroud)

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

Ant*_*iro 15

NotFoundHttpExceptionLaravel中的一个例外总是意味着它无法为特定URL找到路由器.在您的情况下,这可能是您的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>
Run Code Online (Sandbox Code Playgroud)

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

localhost/Test/public/
Run Code Online (Sandbox Code Playgroud)

工作正常,但不是这样:

localhost/Test/public/test
Run Code Online (Sandbox Code Playgroud)

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

localhost/Test/public/index.php/test
Run Code Online (Sandbox Code Playgroud)

因为Laravel需要重写才能工作.

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

localhost/Test/
Run Code Online (Sandbox Code Playgroud)

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

所有这些假设你使用的是Apache 2.


sun*_*tch 15

我有过这样的案例。我检查了所有代码,我的解决方案是:

php artisan route:cache
Run Code Online (Sandbox Code Playgroud)

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