资源控制器 - BulkDelete
ResourceController - BulkDelete
最近我看了 "Cruddy by Design" - Laracon US 2017 现在我正试图摆脱我控制器中的任何额外方法(所以我只有 index、create、store、show、edit、update 和摧毁)
Adam Wathan 谈到创建新的控制器来放入这些方法,例如:
PodcastsController@publish
会变成
PublishedPodcastsController@store
所以现在我的应用程序有这些路由:
Route::delete('tags', [TagsController::class, 'bulk_delete']);
Route::resource('tags', TagsController::class);
而且我不确定如何重构 bulk_delete
方法。
我想到的一个想法是将 TagsController
控制器重命名为 TagController
(单数),创建一个新的 TagsController
(复数),然后将 bulk_delete
方法,所以我会有这些路线:
Route::resource('tag', TagController::class); // index, create, store, show, edit, update, destroy
Route::resource('tags', TagsController::class)->only([
'delete' // delete => bulk_delete
]);
但我不确定我是否喜欢它。
有没有其他方法可以在 ResourceController 中使用 bulk_delete
方法?
不,这基本上不是为同一资源创建尽可能多的控制器的好方法。
如果你想使用资源以外的一些功能也可以。
如果你有
Route::resource('tags', TagsController::class);
因此,如果您需要使用批量删除方法,那么您可以:
Route::get('tags/delete', [TagsController::class, 'bulk_delete']);
并且您可以在查询参数中传递 ID,并通过控制器中的 Request::class 访问它们。
老实说,在我看来,使用像 TagsController 这样的东西是一个很大的否定,因为 Laravel 在他自己的逻辑中使用复数或 none 复数。
您可以将 Request 添加到 destroy 方法并检查请求值(如项目),但您仍然必须处理 Object,因为默认情况下它会尝试创建一个对象。
你可以做的是 post 删除而不是 /{idofdeleteobject} 传递一个像 /bulk 这样的字符串,如果标签为空,因为它不是对对象数组的 ID 检查请求,
public function(Tag $tag, Request $request) {
if(!is_null($tag)) {
return $tag->delete();
})
if($request->has('bulk') {
// logic for deleting all bulk
})
}
最近我看了 "Cruddy by Design" - Laracon US 2017 现在我正试图摆脱我控制器中的任何额外方法(所以我只有 index、create、store、show、edit、update 和摧毁)
Adam Wathan 谈到创建新的控制器来放入这些方法,例如:
PodcastsController@publish
会变成
PublishedPodcastsController@store
所以现在我的应用程序有这些路由:
Route::delete('tags', [TagsController::class, 'bulk_delete']);
Route::resource('tags', TagsController::class);
而且我不确定如何重构 bulk_delete
方法。
我想到的一个想法是将 TagsController
控制器重命名为 TagController
(单数),创建一个新的 TagsController
(复数),然后将 bulk_delete
方法,所以我会有这些路线:
Route::resource('tag', TagController::class); // index, create, store, show, edit, update, destroy
Route::resource('tags', TagsController::class)->only([
'delete' // delete => bulk_delete
]);
但我不确定我是否喜欢它。
有没有其他方法可以在 ResourceController 中使用 bulk_delete
方法?
不,这基本上不是为同一资源创建尽可能多的控制器的好方法。
如果你想使用资源以外的一些功能也可以。 如果你有
Route::resource('tags', TagsController::class);
因此,如果您需要使用批量删除方法,那么您可以:
Route::get('tags/delete', [TagsController::class, 'bulk_delete']);
并且您可以在查询参数中传递 ID,并通过控制器中的 Request::class 访问它们。
老实说,在我看来,使用像 TagsController 这样的东西是一个很大的否定,因为 Laravel 在他自己的逻辑中使用复数或 none 复数。
您可以将 Request 添加到 destroy 方法并检查请求值(如项目),但您仍然必须处理 Object,因为默认情况下它会尝试创建一个对象。
你可以做的是 post 删除而不是 /{idofdeleteobject} 传递一个像 /bulk 这样的字符串,如果标签为空,因为它不是对对象数组的 ID 检查请求,
public function(Tag $tag, Request $request) {
if(!is_null($tag)) {
return $tag->delete();
})
if($request->has('bulk') {
// logic for deleting all bulk
})
}