我尝试在Laravel中使用嵌套类别和单个项目构建类似电子商务的路由,这种方法效果很好但是有很大的例外。
这是我的路线文件的重要部分:
Route::get('/', 'PageController@home')->name('Home');
Route::get('/{category}', 'PageController@show')->where('category', '.+')->name('Category');
Route::get('/{slug}/{item_id?}', 'ItemController@show')->name('Item');
如您所见,类别和项目的逻辑在两个不同的控制器中分开。
使用www.page.com/category
或www.page.com/category/subcategory
甚至www.page.com/category/subcategory/subsubcategory
这些网址模式可以很好地运用类别。
但是当我尝试使用www.page.com/item-slug
或www.page.com/item-slug/12345
调用项目时,脚本始终使用类别路径。
在我的项目模型中,我也覆盖了路径键名称:
...
public function getRouteKeyName()
{
return 'slug';
}
......但没有成功。
希望,你可以帮助我,或者你曾经遇到过类似的问题。
答案 0 :(得分:0)
你正在使用它真正糟糕的方法。你最好为每条路线使用前缀,原因有很多(你可以谷歌)。例如,
Route::get('/', 'PageController@home')->name('Home');
Route::get('/categoryPrefix/{category}', 'PageController@show')>where('category', '.+')->name('Category');
Route::get('/itmPrefix/{slug}/{item_id?}', 'ItemController@show')->name('Item');
使用定义的前缀访问这些路由。