【发布时间】:2021-08-13 04:55:00
【问题描述】:
如何明确表示路由模型绑定以仅获取相关类别?我的 web.php 文件如下:
Route::get('/catalog/{category}', [CategoryController::class, 'index'])->name('category.index');
Route::get('/catalog/{category}/{subcategory}', [SubcategoryController::class, 'index'])->name('subcategory.index');
Route::get('/catalog/{category}/{subcategory}/{subsubcategory}', [SubsubcategoryController::class, 'index'])->name('subsubcategory.index');
子子类别控制器:
public function index(Category $category, Subcategory $subcategory, Subsubcategory $subsubcategory)
{
$subsubcategory->load('product')->loadCount('product');
$products = Product::where('subsubcategory_id', $subsubcategory->id)->orderByRaw('product_order = 0, product_order')->get();
return view('subsubcategory.index', compact('subsubcategory', 'products'));
}
和有问题的模型:
public function subcategory()
{
return $this->belongsTo(Subcategory::class);
}
public function category()
{
return $this->belongsTo(Category::class);
}
public function getRouteKeyName()
{
return 'slug';
}
它部分工作正常。它加载了所有的蛞蝓,但问题是,假设我有三星子类别,它的父类别如下:
目录/手机/android/三星
每当我将 url 从 catalog/mobile-phones/android/samsung 修改为 catalog/mobile-phones/ios/samsung 时,它都可以工作,实际上它不应该.如何处理第二种情况?
PS:如果我打开子类别并更改类别 slug,它也适用。但是,很明显,如果上层类别不存在,它会抛出 404。
【问题讨论】:
-
尝试颠倒列出的路线,改为此顺序 ``` Route::get('/catalog/{category}/{subcategory}/{subsubcategory}', [SubsubcategoryController::class, 'index'])->name('subsubcategory.index'); Route::get('/catalog/{category}/{subcategory}', [SubcategoryController::class, 'index'])->name('subcategory.index'); Route::get('/catalog/{category}', [CategoryController::class, 'index'])->name('category.index'); ```
-
感谢您的回复,但功能还是一样
标签: laravel routes route-model-binding