Laravel маршруты не работают?
Я только начал изучать структуру Laravel и у меня возникли проблемы с маршрутизацией.
единственный маршрут, который работает, - это домашний маршрут по умолчанию, который прикреплен к Laravel из коробки.
Я использую WAMP в Windows, и он использует PHP 5.4.3 и Apache 2.2.22, а также у меня включен mod_rewrite и удален индекс.php ' из приложения.php файле конфигурации оставить пустую строку.
Я создал новый контроллер пользователей:
class User_Controller extends Base_Controller {
public $restful = true;
public function get_index()
{
return View::make('user.index');
}
}
Я создал файл представления в application/views/ user / called .php С некоторым базовым html-кодом и в маршрутах.php я добавил следующее:
Route::get('/', function()
{
return View::make('home.index');
});
Route::get('user', function()
{
return View::make('user.index');
});
первый маршрут отлично работает при посещении корня (http://localhost/mysite/public
) в моем веб-браузере, но когда я пытаюсь перейти на мой второй маршрут с http://localhost/mysite/public/user
Я получаю 404 не найдена ошибка. Почему это происходит?
15 ответов:
вы пробовали добавить это в файл маршрутов вместо
Route::get('user', "user@index")
?кусок текста перед
@
,user
в этом случае будет направлять страницу на пользовательский контроллер и кусок текста после@
,index
, направить скриптuser
функцииpublic function get_index()
.я вижу, вы используете
$restful
в этом случае вы можете установить свойRoute
доRoute::any('user', 'user@index')
. Это будет обрабатывать обаPOST
иGET
, вместо того, чтобы писать их обоих отдельно.
на моей установке Ubuntu LAMP я решил эту проблему со следующими 2 изменениями.
- включить mod_rewrite на сервере apache:
sudo a2enmod rewrite
.- Edit / etc/apache2 / apache2.conf, изменение директивы "AllowOverride" для каталога /var/www (который является моим основным корнем документа):
AllowOverride All
затем перезапустите сервер Apache:
service apache2 restart
с помощью WAMP нажмите на значок wamp- > apache - > модули apache - >прокрутите и проверьте rewrite_module Перезапуск LoadModule rewrite_module
Примечание, серверное приложение автоматически перезапускается для вас, как только вы включите "rewrite_module"
вы пытались проверить, если
http://localhost/mysite/public/index.php/user
работает? Если это так, то убедитесь, что все папки вашего пути не имеют заглавных букв. У меня была такая же ситуация, и преобразование букв в нижний регистр помогло.
я получал ту же проблему, используя EasyPHP. Нашел, что я должен был указать
AllowOverride All
в своем<Directory>
блокhttpd.conf
. Без этого Apache иногда игнорирует ваш.htaccess
.мой в конечном итоге выглядит так...
<Directory "D:/Dev"> Options FollowSymLinks Indexes #### NEXT IS THE CRUCIAL LINE #### AllowOverride All Order deny,allow Allow from 127.0.0.1 Deny from all Require all granted </Directory>
маршруты
используйте их для определения конкретных маршрутов, которые не управляются контроллерами.
контроллеры
используйте их, когда вы хотите использовать традиционную архитектуру MVC
решение проблемы
вы не регистрируете контроллеры в качестве маршрутов, если вы не хотите конкретный "именованный" маршрут для действия контроллера.
вместо того, чтобы создавать маршрут для ваших действий контроллеров, просто зарегистрируйте свой контроллер:
Route::controller('user');
теперь ваш контроллер зарегистрирован, вы можете перейти к
http://localhost/mysite/public/user
и свойget_index
будет работать.вы также можете зарегистрировать все контроллеры за один раз:
Route::controller(Controller::detect());
не забываем "
RewriteBase
" вpublic/.htaccess
:например :
Options +FollowSymLinks RewriteEngine On RewriteBase /your/folder/public
хорошо, так что после удара головой по этой проблеме чуть больше дня... Я встал и сделал то, что должен был сделать вчера, и отладил то, что происходило!
что Laravel пытается сделать здесь, это вставить файл
index.php
прямо перед путем, заданным в качестве маршрута. Так, например, если вы указалиRoute::get('/account/create', ...,
и выполнить ваше приложение от saylocalhost/laravel/authenticate/public/account/create
в вашем браузере, то laravel хочет выполнитьlocalhost/authenticate/public/index.php/account/create
, но для этого.... Apache должен видеть, что запросы через/wamp/www/laravel/laravel/authentication/public
(ваш путь может несколько отличаться, в зависимости от того, где ваше приложение laravel фактически установлено, но трейлингpublic
где замена должна иметь место) должен быть применен 'RewriteRule'.к счастью, laravel предоставляет правильное правило перезаписи в удобном
.htaccess
файл прямо там, в вашем приложенииpublic
папка. Проблема в том, что код в этом '.файл htaccess не будет работать с тем, как WAMP настроен из коробки. Причиной этого, по-видимому, является проблема, предложенная muvera в верхней части этого потока -- код rewrite_module должен быть загружен Apache передRewriteRule
материал будет работать. Черт возьми, это имеет смысл.часть, которая не имеет смысла: просто
stopping
иrestarting
службы Apache не будут подбирать изменения, необходимые для WAMP, чтобы сделать правильную вещь с вашим RewriteRule-я знаю, я пробовал это много раз!что работает: внесите изменения, предложенные muvera (см. Верхнюю часть потока) для загрузки правильные модули. Затем сбросьте весь сеанс Windows, таким образом, сбрасывая Apache из памяти в целом. Перезагрузите (перезагрузите) WAMP, и вуаля! исправление работает, применяется правильный рерайтер, яда, яда; я живу долго и счастливо.
хорошая новость из всего этого: я знаю намного больше о
.htaccess
,RewriteRule
иhttpd.conf
файлы. Существует хороший (производительность) аргумент для перемещения логики из вашего приложенияpublic
.htaccess
файл, и положить его в из ваш файл httpd.conf в папке Apache ' bin ' кстати (особенно если у вас есть доступ к этой папке).
попробуйте включить короткие теги php в вашем php.Ини. ПУВР имеет их, как правило, и что Laravel должен их.
Route::get('/', function() { return View::make('home.index'); }); Route::get('user', function() { return View::make('user.index'); });
изменить выше
Route::get('user', function() { return View::make('user.index'); }); Route::get('/', function() { return View::make('home.index'); });
вы должны использовать '/ ' (home / default) в конце ваших маршрутов
вы должны использовать Laravel 5 команда
class User_Controller extends Controller { public $restful = true; public function get_index(){ return View('user.index'); } }
и в стороны.php
Route::get('/', function() { return view('home.index'); }); Route::get('user', function() { return view('user.index'); });
изменения команды Laravel 5 для просмотра и контроллера см. документацию у меня была такая же ошибка до
основная проблема маршрута не работает есть mod_rewrite.so модуль в macos, linux не включен в httpd.conf файл конфигурации apache, так что может .htaccess для работы. я решил это, раскомментировав строку:
LoadModule rewrite_module libexec / apache2 / mod_rewrite. so
удалите # из строки выше httpdf.конф. Тогда это будет работать. наслаждайтесь!