【问题标题】:Laravel filter from pretty URL来自漂亮 URL 的 Laravel 过滤器
【发布时间】:2020-08-14 16:18:56
【问题描述】:

我有一个 CMS 网站,并且根据类别和子类别创建了一些搜索过滤器。

所以我使用了如下路线

Route::get('search/{filter?}', function ($filter) {
    return $filter;
})->where('filter', '.*');

现在表单提交时生成的 URL 如下所示

https://cms.dev/search/category/men/sub-category/shirt/price/100,300

如何将参数转换为键值对?

【问题讨论】:

  • 很难。但也可以用作route 并添加更多参数

标签: php laravel


【解决方案1】:

使用 preg_split 或 explode 你可以得到你想要的。

Route::get('search/{filter?}', function ($filter) {
    return preg_split('/[\/\\\]/',$filter );
})->where('filter', '.*');

在这些情况下,我更喜欢将我的参数作为查询参数附加到 URL,如下所示: https://example.com/exampleroute?param1=example&param2=example

这样我可以在控制器中使用 Request 访问参数。

request('param1')
or
$request->param1

我也可以通过填充路由函数的第二个参数来生成所需的 URL。路由函数首先填充 URL 参数,然后如果第二个参数中有任何其他元素,它将作为查询附加到 URL。

route('example' , ['param1'=>123 , 'param2'=>3456])

使用简单的表单(method="get") 来生成 URL 也很容易。

还要记住,Elequent 的分页结果接受参数附加到其页面。

【讨论】:

  • 我正在开发一个 CMS 网站,所以我不确定会有多少搜索参数,而且我正在使用 slug。你如何处理这些情况?
  • @MikeRoss 在类似的情况下。我会使用一种形式的搜索过滤器。该表单包括从数据库动态加载的复选框和单选按钮以及其他输入。假设我将所有类别和子类别加载为复选框,并将它们的 slug 设置为复选框值。这些复选框具有相同的名称,将作为数组发送到控制器。在控制器中,我可以访问所选类别的 slug 数组,现在我有了类别,因此我可以构建查询以加载数据。
  • 是的,我现在正在采取类似的方法,所以我想我在正确的轨道上,不需要制作漂亮的网址和preg_split
猜你喜欢
  • 1970-01-01
  • 2014-01-25
  • 2019-06-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-11
相关资源
最近更新 更多