【问题标题】:Filters in URL using Laravel使用 Laravel 过滤 URL
【发布时间】:2014-11-15 19:53:00
【问题描述】:

我正在尝试在用户无法选择更多过滤器的页面上过滤来自数据库的结果。

我有:

...
$out .= '<a class="filter-link" href="'.$_SERVER['REQUEST_URI'].'&age='.$ageId.'">';
...

这样做的问题是,它显然会继续将相同的内容附加到查询字符串,即

?page=1&&age=3&age=3&age=1&age=6

如何使用 Laravel 使其正常工作?

【问题讨论】:

  • 您的网站是如何构建的?您是否在同一页面上选择所有这些过滤器?也许使用复选框?
  • 也许http_build_query可以帮助你?
  • 谢谢,将每个过滤器链接到同一个控制器会更好吗?传递类似 age=3 的内容并将其附加到会话变量中?

标签: php laravel laravel-4 query-string


【解决方案1】:

使用http_build_query

$out .= '<a class="filter-link" href="'.$_SERVER['REQUEST_URI'].'?'.http_build_query($_GET).'">';

【讨论】:

    【解决方案2】:

    你可以这样做:

    $params = Input::get();
    $params['age'] = 'something';  # overwrite the age that was in the URL (if any)
    $params = http_build_query($params);
    
    $out .= '<a class="filter-link" href="'.[THE_PAGE_URL].'?'.$params">';
    

    请注意,[THE_PAGE_URL] 应该是其基本形式,其中没有任何查询字符串参数,因为您将使用 $params 再次将它们全部附加。

    根据您的评论进行编辑:

    这会在每次 链接被点击。

    假设您的用户到达如下网址:

    http://example.com/some/route?page=3&age=6&color=red

    如果你想要一个忘记所有当前参数并且只指定年龄的链接:

    $out .= '<a class="filter-link" href="'.URL::to("some/route").'?age=5">';
    

    上面的结果应该是:http://example.com/some/route?age=5

    或者,如果您想要一个保留当前颜色过滤器(红色)但更改年龄参数并完全忘记页面参数的链接:

    $params = Input::except('page');  # get all current parameters except page...
    $params['age'] = '5';  # overwrite the age parameter that was in the URL (if any)
    $params = http_build_query($params);  # should return "color=red&age=5"
    
    $out .= '<a class="filter-link" href="'.URL::to('some/route').'?'.$params">';
    

    以上结果应为:http://example.com/some/route?color=red&age=5

    希望对您有所帮助。

    【讨论】:

    • 每次单击链接时,都会将相同的参数附加到查询字符串中。
    • @imperium2335 请查看我编辑的答案以回应您的评论。
    【解决方案3】:

    在 Laravel 4 中,您可以使用 Request 类来构建 URL。 Request::url() 去掉查询参数,Request::fullUrl() 包含它们。您的代码如下所示:

    $out .= '<a class="filter-link" href="'.Request::url().'?age='.$ageId.'">';
    

    如果需要附加page参数(如果存在的话),那么使用http_build_query

    $params['age'] = $ageId;
    $params['page'] = Input::get('page');
    $out .= '<a class="filter-link" href="'.Request::url().'?'.http_build_query($params).'">';
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-16
      • 1970-01-01
      • 2017-07-08
      • 2016-12-09
      • 1970-01-01
      • 2020-08-14
      • 2013-02-03
      • 2017-03-12
      相关资源
      最近更新 更多