Laravel 5.1:如何正确生成URL?

Laravel 5.1: How to generate URL right way?

我有复杂的路由系统,有一个简短的例子:

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------------------

表示用户打开美国域名(网站有很多国家),类别"glasses",品牌"Adidas",过滤器中性别为女性。在此页面上,我正在尝试生成新的 URL,例如性别是男,写这样的东西:

route('brand', ['Gender' => 'Men']);
// result: http://Men/------------------

所以,系统丢失了国家域名、类别、品牌,甚至是斜线。我希望系统已经知道当前参数,我只需要传递更改的参数并拥有漂亮的代码。

正确的做法是什么?

"我希望系统已经知道当前参数,我只需要传递更改的参数并拥有漂亮的代码。"

系统确实知道参数,但它不知道的是,您是否要重用它们。

您可以显式传递参数,例如:

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'
]);

但请记住 - 这只是回答您问题的直接解决方案,而不是我推荐的方法。