В SymfonyКомпонентHttpKernelИсключенияNotFoundHttpException Что Laravel

Я пытаюсь использовать контроллер 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/ и он показывает сообщение" вы прибыли". Но когда я попытался ... --6--> это дает мне "SymfonyComponentHttpKernelExceptionNotFoundHttpException"

вот мой лог:

[2014-05-11 14:29:59] production.ERROR: NotFoundHttpException Route: `http://localhost/Test/public/test` [] []
[2014-05-11 14:29:59] production.ERROR: exception 'SymfonyComponentHttpKernelExceptionNotFoundHttpException' in C:wampwwwtestbootstrapcompiled.php:5289
Stack trace:
#0 C:wampwwwtestbootstrapcompiled.php(4663): IlluminateRoutingRouteCollection->match(Object(IlluminateHttpRequest))
#1 C:wampwwwtestbootstrapcompiled.php(4651): IlluminateRoutingRouter->findRoute(Object(IlluminateHttpRequest))
#2 C:wampwwwtestbootstrapcompiled.php(4643): IlluminateRoutingRouter->dispatchToRoute(Object(IlluminateHttpRequest))
#3 C:wampwwwtestbootstrapcompiled.php(698): IlluminateRoutingRouter->dispatch(Object(IlluminateHttpRequest))
#4 C:wampwwwtestbootstrapcompiled.php(679): IlluminateFoundationApplication->dispatch(Object(IlluminateHttpRequest))
#5 C:wampwwwtestbootstrapcompiled.php(1136): IlluminateFoundationApplication->handle(Object(IlluminateHttpRequest), 1, true)
#6 C:wampwwwtestbootstrapcompiled.php(7218): IlluminateHttpFrameGuard->handle(Object(IlluminateHttpRequest), 1, true)
#7 C:wampwwwtestbootstrapcompiled.php(7815): IlluminateSessionMiddleware->handle(Object(IlluminateHttpRequest), 1, true)
#8 C:wampwwwtestbootstrapcompiled.php(7762): IlluminateCookieQueue->handle(Object(IlluminateHttpRequest), 1, true)
#9 C:wampwwwtestbootstrapcompiled.php(10768): IlluminateCookieGuard->handle(Object(IlluminateHttpRequest), 1, true)
#10 C:wampwwwtestbootstrapcompiled.php(640): StackStackedHttpKernel->handle(Object(IlluminateHttpRequest))
#11 C:wampwwwtestpublicindex.php(49): IlluminateFoundationApplication->run()
#12 {main} [] []

Я знаю, что этот вопрос задавался много раз. Я прошел через многие соответствующие темы, но просто не могу понять решение.

5 ответов


A NotFoundHttpException исключение в Laravel всегда означает, что он не смог найти маршрутизатор на конкретный URL. И в вашем случае это, вероятно, проблема в конфигурации вашего веб-сервера, конфигурации виртуального хоста (сайта) или .настройка htaccess.

ваш публичный/.откройте файл. htaccess должен выглядеть так:

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

    RewriteEngine On

    # Redirect Trailing Slashes...
    RewriteRule ^(.*)/$ / [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, ваши URL-адреса должны выглядеть так:

localhost/Test/

это еще один ключ к тому, что корень документа вашего виртуального хоста неправильно настроен или нет указывая на /var/www/Test / public или любой путь вашего приложения.

все это предполагает, что вы используете Apache 2.


Я нашел другую ситуацию, когда эта ошибка может произойти, и что у одного нет ничего с перезаписями, на этот раз. Это очень неприятная опечатка:)

Я:

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

посмотреть {?заглушка}, что вызвало эту ошибку со мной, это должен быть {заглушка?} с курса. Но если вы новичок в Laravel (как и я), это очень легко пропустить и может занять некоторое время, чтобы понять. :)


Я получал то же исключение ошибки, когда один проект работал, но другой проект с тем же .htaccess файл на localhost не работает. Оказывается, поскольку в моем каталоге проекта есть заглавная буква, URL также должен быть капиталом для маршрутизации. localhost/minorweb/public / аккаунт не работал, но localhost/minorWeb/public / аккаунт С W capital работал. Итак, если ничто не решает проблему,проверьте соответствие URL-адреса с каталогом проекта с case.


Как говорит Арджан Коул, у меня была аналогичная ошибка

использование:

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}


еще одна вещь, чтобы проверить ваш корень документа,

мой был:

www / var

а должно быть:

www/var/mysite / public

еще одна причина, почему я ненавижу веб-разработки