【问题标题】:Laravel 5.1: How to generate URL right way?Laravel 5.1:如何正确生成 URL?
【发布时间】:2016-03-01 02:31:09
【问题描述】:

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

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

这是过滤页面,可能有很多参数。例如用户可以打开这个网址:

http://site_us.com/glasses/Adidas/Women------------------

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

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

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

这样做的正确方法是什么?

【问题讨论】:

  • 与其为此创建一个完整的 URL,为什么不只是有一个搜索 URL,然后附加一个查询字符串呢?即http://site_us.com/glasses?brand=Adidas&gender=Women,然后您可以将它们拉入您的控制器并使用过滤器查询一些结果。
  • @James,我必须为非常旧的系统重写框架。因此,它应该是 laravel,但使用旧 URL。我知道这是一个奇怪的系统,但它不是我开发的。
  • @James,这不是重点,我们可以忘记过滤器。重点是 - 如何生成简短而美观的 URL,只需发送更改的参数。

标签: php laravel routes


【解决方案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'
]);

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

【讨论】:

  • 谢谢!看起来我需要创建一个小辅助函数,它会知道可能的参数数组,如果它们存在于请求中,请将它们传递给 route() 函数,并替换/添加我的参数。
猜你喜欢
  • 1970-01-01
  • 2015-10-09
  • 1970-01-01
  • 1970-01-01
  • 2019-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多