Symfony\Component\HttpKernel\Exception\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/, и он показывает сообщение "Вы пришли". Но когда я попробовал 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} [] []

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

Ответ 1

A NotFoundHttpException Исключение в Laravel всегда означает, что он не смог найти маршрутизатор для конкретного URL. И в вашем случае это, вероятно, проблема в конфигурации вашего веб-сервера, конфигурации виртуального хоста (сайта) или конфигурации .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, ваши URL-адреса должны выглядеть так:

localhost/Test/

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

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

Ответ 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', так как оба контроллера находятся в папке администратора

Ответ 3

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

У меня было:

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

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

Ответ 4

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

Ответ 5

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

с помощью:

Route::get('/performance/{$submit_type}/{$send_selected}/{$date_a}/{$date_b}', '[email protected]');

вместо

Route::get('/performance/{submit_type}/{send_selected}/{date_a}/{date_b}', '[email protected]');

Так что будьте внимательны, когда используете {$ stuff}

Ответ 6

еще одна вещь, которую нужно проверить, - это ваш корень документа,

моя была:

WWW/вар

и должен быть:

WWW/вар/MySite/публика

Другая причина, по которой я ненавижу веб-разработку