2013-08-07 5 views
1

В установке с Laravel 4, используя Jeffrey Way's Laravel 4 Generators, я создал «твит» ресурс, используя команду люльки из его примера:Laravel 4 - изменение ресурса пути корневой маршрутизации

php artisan generate:scaffold tweet --fields="author:string, body:text" 

Это породило модель, вид , контроллер, миграция и информация о маршрутизации для типа твита. После миграции базы данных, посещение http://localhost:8000/tweets прекрасно работает и отображает ожидаемый контент.

Содержимое routes.php файла в этой точке:

Route::resource('tweets', 'TweetsController'); 

Теперь я хотел бы, чтобы переместить URL для tweets на один уровень вверх в admin/tweets, поэтому выше URL должно стать: http://localhost:8000/admin/tweets. Обратите внимание, что я не рассматриваю «Admin» как ресурс, а просто хочу добавить его для гипотетических организационных целей.

Изменение файла routes.php к:

Route::resource('admin/tweets', 'TweetsController'); 

Не работает, и выводит следующее сообщение об ошибке:

Unable to generate a URL for the named route "tweets.create" as such route does not exist.

Аналогично при использовании следующие:

Route::group(array('prefix' => 'admin'), function() { 
    Route::resource('tweets', 'TweetsController'); 
}); 

As было предложено в this stackoverflow question.

Использование php artisan routes показывает, что названные маршруты также теперь имеет admin приставку к ним, превращая tweets.create в admin.tweets.create.


Почему ошибка в том, что она не может найти tweets.create? не следует автоматически разрешать (судя по таблице маршрутов), использовать admin.tweets.create?

Как изменить свою маршрутизацию, чтобы эта ошибка больше не возникала?

+1

Я только что протестировал новый контроллер ресурсов, и он отлично работает для меня. Проблема заключается не в Маршруте, а в том, что файлы просмотра проверяют ваши файлы просмотра, есть ссылка на маршрут, например 'link_to_route ('tweets.create', ' Добавить новый твит ') ', это создает ошибку, потому что, когда вы добавляете' admin' в качестве префикса 'tweets.create', не существует, поэтому меняйте его на' admin.tweets.create' каждый раз, когда в вашем контроллере также используется когда-либо названный маршрут используется –

+0

Спасибо за быстрый ответ! Я сам это заметил. Должно было выглядеть немного дольше, прежде чем размещать вопрос: P – Johannes

ответ

2

Я только что протестировал новый контроллер ресурсов, и он отлично работает для меня. Проблема не в Маршруте, его с использованием named routes, используемого в вашем приложении.

проверить файлы представлений есть ссылка на маршрут как link_to_route('tweets.create', 'Add new tweet'), это создает ошибку, потому что, когда вы добавляете admin в качестве префикса tweets.create не существует так изменить его admin.tweets.create повсюду, в вашем controller также, где когда-либо названный маршрут используемый.

+0

Просто из любопытства, есть ли лучший способ связывания маршрутов в представлениях, которые бы не сломались, если вы добавите префикс, подобный этому?Возможно, с помощью link_to_action? – Johannes

+1

yes best bet 'link_to_action ('TweetsController @ create', 'Добавить новый твит')' –

Смежные вопросы