Laravel获取当前URL参数并附加到新URL请求

时间:2014-04-13 09:02:50

标签: php laravel-4

在我的Laravel应用程序中,我创建了一个侧边栏,其中包含

之类的链接

/buy?state=NY or /buy?area=Queens让用户选择州或区域

我还有一个表格可以让用户过滤各种评价,流派等内容。 当我点击过滤按钮时,网址会更改为

buy?min_year=1880&max_year=2019&min_rating=1&max_rating=10&genre=horror

它会从网址

中删除?state=NY or ?area=Queens

我想更改操作以将当前网址参数附加到过滤字符串

我试过了

$url = Request::path();

if (isset($_GET["state"]) && !empty($_GET['state'])) {
$state = $_GET['state'];
$url = $url . "&state=". $state;

}
if (isset($_GET["council"]) && !empty($_GET['council'])) {
$council = $_GET['council'];
$url = $url . "&council=". $council;

}
if (isset($_GET["area"]) && !empty($_GET['area'])) {
$area = $_GET['area'];
$url = $url . "&area=". $area;

然后以我的过滤形式

{{ Form::open(array('url' => $url, 'class' => 'form-inline', 'method' => 'GET')) }}

但这导致返回此字符串的表单。

/buystate=NY?min_year=1880&max_year=2019&min_rating=1&max_rating=10&genre=horror

我想要的时候

/buy?state=NY&min_year=1880&max_year=2019&min_rating=1&max_rating=10&genre=horror

3 个答案:

答案 0 :(得分:3)

This will solve your problem, and I do agree that we're not supposed to be limited of the framework.

public static function get_full_route() {
    $split_url = explode('/', URL::full());
    $ret_url = [];
    for($i = 0; $i < count($split_url); $i++) if(strlen($split_url[$i]) > 0) $ret_url[] = $split_url[$i];
    return array("protocol" => $ret_url[0], "domain" => $ret_url[1], "route" => $ret_url[2]);
}

Return

// In my case
array(3) { 
   ["protocol"]=> string(5) "http:" 
   ["domain"]=> string(14) "localhost:8000" 
   ["route"]=> string(9) "login?a=1" 
}

答案 1 :(得分:2)

这仅适用于Laravel 4.x!

如果我理解你,那就是你需要的。

Laravel提供出色的路由功能:

laravel.com/docs/routing(真的值得一读!)

从文档(适应你的vars)

// Route::post(.... for forms)
Route::get('buy/{state}/{min_year}/{and_so_on}', function($state, $min_year, $and_so_on) {
   return array(
       'state' => $state,
       'min_year' => $min_year,
       'and_so_on' => $and_so_on
   );
});

HTML部分就像是

<a href="buy/jersey/2012/and_so_on">Choose State</a>

您也可以将路线分组:

Route::group(array('prefix' => '/state'), function(){
    Route::get('/{min_year}'), function() {...});
    Route::get('/{and_so_on}'), function() {...});
});

答案 2 :(得分:1)

接受的答案对我没有帮助,所以这是我的版本基于您的示例供参考。 请注意,这是在问题中指出的 Laravel 5.2 而不是Laravel 4。请注意它是否适用于Laravel 4。

首先从当前网址获取参数。

$parameters = request( )->input( ); //return all GET parameters in an array.

然后添加或编辑您想要的内容。

$parameters['state'] = $state; //this will set or override the 'state' value.

将所有参数推送到所需的路线。

$url = route('search', $parameters); 

路径网址中未匹配的任何参数都会附加到网址的末尾。

Happy dayz。 :d