我有复杂的路线系统,有简短的例子:
Route::group(['domain' => '{country}'], function () {
Route::get('/{category}/{brand}/{Gender?}-{FrameShape?}-{FrameType?}-{FrameColor?}-{LenseColor?}-{PriceRange?}-{FrameMaterial?}-{LensMaterial?}-{TryOn?}-{View360?}-{FastShipping?}-{SortBy?}-{Page?}-{Clearance?}-{NewArrival?}-{Size?}-{Prescription?}-{Polarized?}-{AsianFit?}', 'BrandController@index')
->name('brand');
});
这是过滤页面,可能有很多参数。例如,用户可以打开此URL:
http://site_us.com/glasses/Adidas/Women------------------
这意味着用户打开美国域名(网站有很多国家/地区),类别"眼镜",品牌"阿迪达斯",过滤器性别是女性。在此页面上,我尝试生成新的网址,例如性别是男人,写下这样的东西:
route('brand', ['Gender' => 'Men']);
// result: http://Men/------------------
因此,系统失去了国家域名,类别,品牌,甚至是斜线。我希望系统已经知道当前参数,我只需要传递更改的参数并拥有漂亮的代码。
这样做的正确方法是什么?
答案 0 :(得分:1)
"我希望系统已经知道当前的参数,我只需要传递更改的参数并拥有漂亮的代码。"
系统确实知道参数,但它不知道的是,您是否要重用它们。
您可以显式传递以下参数:
route('brand', [
'category' => 'your_category',
'brand' => 'your_brand',
'Gender' => 'Men'
]);
或来自请求参数:
route('brand', [
'category' => app('request')->category, // using app() helper to resolve dependency in View
'brand' => app('request')->brand,
'Gender' => 'Men'
]);
但请记住 - 这只是回答问题的直接解决方案,而不是我推荐的内容。