I understand that a Resource controller can have the following methods
index
show
create
edit
store
update
destroy
Now suppose I have the following actions which need to be performed in addition to the resource actions:
- User attempts to log in.
- Admin wishes to find a user by email / first-name
- User requests a post by it's slug
Are resource controllers useless for the above functionality? If programming an API, I obviously want the index, show, edit,create,destroy... but also the login, find, search etc...
Is it possible to route to both types of controller? e.g.
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');
});
});
Or should I just forget about the resource controller and use a restful controller instead?
Just use a resource controller, add those other methods to that same controller, and add routes to those methods directly:
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');
});
});
P.S. I generally shy away from using Route::controller()
. It's too ambiguous.
one of the problems associated with resource controllers are when you are using named routes, with group prefixes it all turns out into a big mess . if you want to make a small change in your prefix, you have to make changes throughout the views and controllers . ie you can't make full power of named routes.
i follow this model when developing my laravel apps .
Route::group( [ 'prefix' => 'admin' ], function(){
Route::resource('pages', 'PageController', [
'names' => [
'show' => 'page',
'edit' => 'page.edit'
],
'only' => [
'show',
'edit'
]
]);
});
so that i have the following advantages .
- there are only routes that you need.
- all the urls are clearly named
and i can generate urls comfortably using the syntax,even if i make a change in prefix or resource names urls are not affected
URL::route('page', array($id))
来源:https://stackoverflow.com/questions/19102534/laravel-4-routeresource-vs-routecontroller-which-to-use