【问题标题】:ResourceController - BulkDelete资源控制器 - BulkDelete
【发布时间】:2021-05-09 23:07:11
【问题描述】:

最近我看了"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
]);

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

还有其他方法可以在 ResourceController 中使用 bulk_delete 方法吗?

【问题讨论】:

    标签: laravel routes controller laravel-api bulk-delete


    【解决方案1】:

    说实话,我认为使用 TagsController 之类的东西是一个很大的问题,因为 Laravel 在他自己的逻辑中使用复数或不使用复数。

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

    你可以做的是发布一个删除,而不是 /{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
        })
    }
    

    【讨论】:

    • 加入方法,非常好的方法。没有考虑到这一点。谢谢!
    【解决方案2】:

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

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

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

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

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

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

    【讨论】:

    • 这正是我已经在做的事情。我想知道是否有更好的方法来做到这一点。我不想创建自定义路线,只想创建资源。
    • 但是 laravel 默认不支持资源中的任何自定义方法。在您的情况下,您肯定需要一个自定义的批量删除方法,这不是 laravel 资源提供的。因此,在这种情况下,最好创建自定义方法并使用它,而不是创建其他控制器。
    猜你喜欢
    • 2011-11-16
    • 1970-01-01
    • 2014-04-28
    • 2014-05-29
    • 1970-01-01
    • 1970-01-01
    • 2017-12-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多