ResourceController语言 - BulkDelete



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

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

PodcastsController@publish

将成为

PublishedPodcastsController@store

所以现在我的应用程序有以下路径:

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

并且我不知道如何重构CCD_ 1方法。

我想到的一个想法是将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在他自己的逻辑中使用复数或非复数。

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

你可以做的是发布一个删除,而不是/{idofdeleteobject}传递一个像/block这样的字符串,如果Tag为null,因为它不是请求中对象数组的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::类访问它们。

相关内容

  • 没有找到相关文章