最近我看了"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::类访问它们。