Я пытаюсь использовать контроллер 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} [] []
Я знаю, что этот вопрос задавали много раз. Я прошел через многие соответствующие темы, но просто не могу понять решение.
Исключение NotFoundHttpException
в Laravel всегда означает, что он не смог найти маршрутизатор для определенного URL-адреса . И в вашем случае это, вероятно, проблема в конфигурации вашего веб-сервера, конфигурации виртуального хоста (сайта) или конфигурации .htaccess.
Ваш public / .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.
Я нашел другую ситуацию, когда эта ошибка может произойти, и что на один раз нечего делать с переписаниями. Это очень неприятная опечатка 🙂
Я имел:
Route::get('replicas/item/{id}/{?stub}', ['uses' => 'ProductReplicasController@productview', 'as' => 'database.replicas.productview']);
см. {? stub}, который вызвал эту ошибку со мной, она должна быть {stub?} с курса. Но если вы новичок в Laravel (как и я), это очень легко пропустить и может занять некоторое время, чтобы понять. 🙂
еще одна вещь для проверки – это ваш корневой каталог,
мой был:
WWW / вар
и должно быть:
WWW / вар / MySite / общественная
Еще одна причина, по которой я ненавижу веб-разработку
Я получал ту же ошибку исключения, когда один проект работал, но другой проект с тем же файлом .htaccess на том же локальном хосте не работал. Оказывается, поскольку в моем каталоге проектов есть заглавная буква, URL-адрес также должен быть капиталом для маршрутизации на работу. localhost / minorweb / public / account не работал, но работает localhost / minorWeb / public / account с W capital. поэтому, если ничто, кажется, не решает проблему, проверьте, что ваш URL-адрес сопоставлен с каталогом проекта с футляром.