微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ResourceController - 批量删除

如何解决ResourceController - 批量删除

最近我观看了"Cruddy by Design" - Laracon US 2017,现在我试图摆脱控制器中的任何额外方法(所以我只有索引、创建、存储、显示、编辑、更新摧毁)

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
]);

但我不确定我是否喜欢它。

是否有其他方法可以将 bulk_delete 方法放入 ResourceController 中?

解决方法

老实说,在我看来使用像 TagsController 这样的东西是一个很大的问题,因为 Laravel 在他自己的逻辑中使用复数或非复数。

您可以向 destroy 方法添加一个请求并检查请求值(如项目),但您仍然必须处理对象,因为它默认尝试创建一个对象。

你可以做的是发布一个删除,而不是 /{idofdeleteobject} 传递一个像 /bulk 这样的字符串,如果 Tag 为空,因为它不是对请求中对象数组的 ID 检查,

public function(Tag $tag,Request $request) {
    if(!is_null($tag)) {
       return $tag->delete();
    })
   
    if($request->has('bulk') {
       // logic for deleting all bulk
    })
}
,

不,这基本上不是为相同资源创建尽可能多的控制器的好方法。

如果你想使用资源以外的一些功能也没关系。 就像如果你有

Route::resource('tags',TagsController::class);

因此,如果您需要使用批量删除方法,那么您可以:

Route::get('tags/delete',[TagsController::class,'bulk_delete']);

并且您可以在查询参数中传递 id 并通过控制器中的 Request::class 访问它们。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。