我知道资源控制器可以使用以下方法
index
show
create
edit
store
update
destroy
现在假设除资源操作外还需要执行以下操作:
资源控制器是否对上述功能无用?如果编程API,我显然想要索引,显示,编辑,创建,销毁......还有登录,查找,搜索等......
是否可以路由到两种类型的控制器? 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');
});
});
或者我应该忘记资源控制器并改用restful控制器?
答案 0 :(得分:32)
只需使用资源控制器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。我一般不愿意使用Route::controller()
。 It's too ambiguous
答案 1 :(得分:1)
与资源控制器相关的一个问题是当你使用命名路由时,使用组前缀这一切都变成了一大堆。如果要对前缀进行少量更改,则必须在整个视图和控制器中进行更改。即你无法充分利用命名路线。
我在开发我的laravel应用程序时遵循此模型。
Route::group( [ 'prefix' => 'admin' ], function(){
Route::resource('pages', 'PageController', [
'names' => [
'show' => 'page',
'edit' => 'page.edit'
],
'only' => [
'show',
'edit'
]
]);
});
所以我有以下优点。
我可以使用语法轻松生成网址,即使我对前缀或资源名称进行了更改,网址也不会受到影响
URL::route('page', array($id))