Laravel ResourceController-批量删除

Laravel ResourceController-批量删除,laravel,routes,controller,laravel-api,bulk-delete,Laravel,Routes,Controller,Laravel Api,Bulk Delete,最近我看了,现在我正试图摆脱控制器中的任何额外方法(因此我只有索引、创建、存储、显示、编辑、更新和销毁) Adam Wathan谈到创建新的控制器以将这些方法放入,例如: PodcastsController@publish 将成为 PublishedPodcastsController@store 因此,现在我的应用程序有以下路径: Route::delete('tags', [TagsController::class, 'bulk_delete']); Route::resource

最近我看了,现在我正试图摆脱控制器中的任何额外方法(因此我只有索引、创建、存储、显示、编辑、更新和销毁

Adam Wathan谈到创建新的控制器以将这些方法放入,例如:

PodcastsController@publish
将成为

PublishedPodcastsController@store

因此,现在我的应用程序有以下路径:

Route::delete('tags', [TagsController::class, 'bulk_delete']);
Route::resource('tags', TagsController::class);
Route::resource('tag', TagController::class); // index, create, store, show, edit, update, destroy
Route::resource('tags', TagsController::class)->only([
    'delete' // delete => bulk_delete
]);
我不知道如何重构
bulk\u delete
方法

我想到的一个想法是将
TagsController
控制器重命名为
TagController
(单数),创建一个新的
TagsController
(复数),然后将
bulk\u delete
方法移到那里,这样我就有了以下路径:

Route::delete('tags', [TagsController::class, 'bulk_delete']);
Route::resource('tags', TagsController::class);
Route::resource('tag', TagController::class); // index, create, store, show, edit, update, destroy
Route::resource('tags', TagsController::class)->only([
    'delete' // delete => bulk_delete
]);
但我不确定我是否喜欢它


有没有其他方法适合ResourceController中的
bulk\u delete
方法?

没有这基本上不是为同一资源创建尽可能多控制器的好方法

如果您想使用资源以外的一些函数,这是可以的。 如果你有

Route::resource('tags', TagsController::class);
因此,如果需要使用批量删除方法,则可以:

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

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

老实说,使用标记控制器之类的东西在我看来是一个很大的禁忌,因为Laravel在自己的逻辑中使用复数或非复数

您可以向destroy方法添加一个请求,并检查请求值(如items),但您仍然需要处理该对象,因为默认情况下它会尝试创建一个对象

您可以做的是发布一个delete,而不是/{idofdeleteobject}传递一个类似/bulk的字符串,如果标记为null,因为它不是请求中对象数组的ID检查

public函数(Tag$Tag,Request$Request){
如果(!is_null($tag)){
返回$tag->delete();
})
如果($request->has('bulk')){
//删除所有大容量数据的逻辑
})
}

这正是我正在做的。我想知道有没有更好的办法。我不想创建自定义路由,只想创建资源。但默认情况下,laravel不支持资源中的任何自定义方法。在您的情况下,您肯定需要一个用于批量删除的自定义方法,这不是laravel资源提供的。因此,在这种情况下,最好创建一个自定义方法并使用它,而不是创建其他控制器。我没想过。非常感谢。