Laravel 4 – Route :: resource vs Route :: controller. Что использовать?

Я понимаю, что контроллер ресурсов может иметь следующие методы

index show create edit store update destroy 

Теперь предположим, что у меня есть следующие действия, которые необходимо выполнить в дополнение к действиям ресурсов:

  • Пользователь пытается войти в систему.
  • Администратор хочет найти пользователя по электронной почте / по имени
  • Пользователь запрашивает сообщение в виде пули

Являются ли контроллеры ресурсов бесполезными для вышеупомянутых функций? Если я программирую API, я, очевидно, хочу индексировать, показывать, редактировать, создавать, уничтожать … но также и логин, поиск, поиск и т. Д. …

Можно ли маршрутизировать оба типа контроллера? например

 Route::group(['prefix' => 'api'], function() { Route::group(['prefix' => 'v1'], function() { // Resource Controller Route::resource('posts', 'Api\V1\PostsResourceController'); // Restful Controller Route::controller('posts', 'Api\V1\PostsController'); }); }); 

Или я должен просто забыть о контроллере ресурсов и вместо этого использовать спокойный контроллер?

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

 Route::group(['prefix' => 'api'], function() { Route::group(['prefix' => 'v1', 'namespace' => 'Api\V1'], function() { // Add as many routes as you need... Route::post('login', 'PostsResourceController@login'); Route::get('find', 'PostsResourceController@find'); Route::get('search', 'PostsResourceController@search'); Route::resource('posts', 'PostsResourceController'); }); }); 

PS Я вообще уклоняюсь от использования Route::controller() . Это слишком неоднозначно .

одна из проблем, связанных с контроллерами ресурсов, – это когда вы используете именованные маршруты, с префиксами групп все это превращается в большой беспорядок. если вы хотите внести небольшое изменение в свой префикс, вам необходимо внести изменения во все виды и контроллеры. т.е. вы не можете полностью использовать именованные маршруты .

Я следую этой модели при разработке моих приложений для laravel.

 Route::group( [ 'prefix' => 'admin' ], function(){ Route::resource('pages', 'PageController', [ 'names' => [ 'show' => 'page', 'edit' => 'page.edit' ], 'only' => [ 'show', 'edit' ] ]); }); 

так что у меня есть следующие преимущества.

  • есть только маршруты, которые вам нужны.
  • все URL-адреса четко обозначены

и я могу с легкостью генерировать URL-адреса, используя синтаксис, даже если я вношу изменения в именах префиксов или имен ресурсов,

 URL::route('page', array($id))