Маршруты 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 to Route::any('user', 'user@index'). Это будет обрабатывать оба POST и GET, вместо того, чтобы писать их обоих отдельно.


на моей установке лампы Ubuntu я решил эту проблему со следующими 2 изменениями.

  1. включить mod_rewrite на сервере apache:sudo a2enmod rewrite.
  2. редактировать / 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>

вы можете попытаться переместить root/public/.htaccess до root/.htaccess и он должен работать


маршруты

используйте их для определения конкретных маршрутов, которые не управляются контроллерами.

контроллеры

используйте их, когда вы хотите использовать традиционную архитектуру MVC

решение проблемы

вы не регистрируете контроллеры как маршруты, если вы не хотите конкретный "именованный" маршрут для действия контроллера.

вместо того, чтобы создавать маршрут для действий контроллеров, просто зарегистрируйте свой контроллер:

Route::controller('user');

теперь ваш контроллер зарегистрирован, вы можете перейти к http://localhost/mysite/public/user и свой get_index будет работать.

вы также можете зарегистрировать все контроллеры за один раз:

Route::controller(Controller::detect());

не забываем "


хорошо, так что после удара головой по этой проблеме чуть больше дня... Я встал и сделал то, что должен был сделать вчера, и отладил то, что происходило!

что Laravel пытается сделать здесь, это вставить файл index.php прямо перед путем, заданным в качестве маршрута. Так, например, если вы указали Route::get('/account/create', ..., и выполните свое приложение из say localhost/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 services не будет подбирать изменения, необходимые для WAMP, чтобы сделать правильную вещь с вашим Перезаписчиком - я знаю, я пробовал это много раз!

что работает: внесите изменения, предложенные muvera (см. Верхнюю часть потока) для загрузки правильные модули. Затем сбросьте весь сеанс Windows, таким образом, сбрасывая Apache из памяти в целом. Перезагрузите (перезагрузите) WAMP и вуаля! исправление работает,применяется правильный переписчик, яда, яда; я живу долго и счастливо.

хорошая новость из всего этого: я знаю намного больше о .htaccess, RewriteRule и httpd.conf файлы. Существует хороший (производительность) аргумент для перемещения логики из public .htaccess файл, и положить его в из ваш файл httpd.conf в папке Apache " bin " BTW (особенно если у вас есть доступ к этой папке).


попробуйте включить короткие теги php в вашем php.ini. ПУВР имеет их, как правило, и что 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 для просмотра и контроллера см. документацию, в которой у меня была такая же ошибка до


просто запустите в своем терминале.

 composer dump-autoload

основная проблема маршрута не работает, есть mod_rewrite.поэтому модуль в macos, linux не включен в httpd.conf файл конфигурации apache, так что может .htaccess для работы. я решил это, раскомментировав строку:

С loadmodule rewrite_module IP-адресов/apache2 не/модуля mod_rewrite.так

удалите # из вышеуказанной строки httpdf.conf. Тогда это сработает. наслаждайтесь!


Я думаю, что вы удалили default .файл htaccess в общей папке laravel. загрузите файл, он должен исправить вашу проблему.