我知道资源控制器可以有以下方法
index
show
create
edit
store
update
destroy
现在假设除了资源操作之外,我还需要执行以下操作:
- 用户尝试登录。
- 管理员希望通过电子邮件/名字查找用户
- 用户通过它的 slug 请求帖子
资源控制器是否对上述功能毫无用处?如果编写 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');
});
});
还是我应该忘记资源控制器而改用 RESTFUL 控制器?
只需使用资源控制器,将这些其他方法添加到同一控制器,然后直接向这些方法添加路由:
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');
});
});
附言我通常回避使用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))