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/публика
Другая причина, по которой я ненавижу веб-разработку