假设我们具有以下两个模型: CategoryModel (具有许多ProductModel)和 ProductModel 。
现在,用户导航到路线/categories
,并看到类别列表(CategoryController::index()
)。用户现在可以单击一个类别以查看该类别中的产品。
您是否将此逻辑放入CategoryController?在称为明细或类似内容(CategoryController::details($categoryId)
)的函数中,还是在逻辑上,用于显示类别产品的商品移至ProductController::index($categoryId)
?
答案 0 :(得分:1)
确实,用户单击了类别,但是您将与ProductModel进行交互,并且您可能会编写如下代码:
public function index(){
$products=ProductModel::query();
if($categoryId=\request('category_id')){
$products->where('category_id',$categoryId);
}
$data=[
"products"=>$products->get();
];
return view("products.index",$data);
}
正如您在上面的代码中看到的,我们的主要模型是ProductModel,我们返回的视图引用了products目录。所以您应该将代码放入ProductsController
如果想使代码整洁,可以使用laravel模型作用域,代码将更改为:
public function index(){
$data=[
"products"=>ProductModel::filter()->get();
];
return view("products.index",$data);
}
所有过滤脚本都将位于过滤范围之后
答案 1 :(得分:1)
恕我直言,我会去一个指向/categories/{category}/products
函数的CategoryController::products($categoryId)
路由。
对我来说,过滤后的/ products索引不太清楚,它可能会与产品REST路由产生混淆。
您还可以在Laravel文档中查看nested resources。