在Laravel中更改查询参数时重定向到当前URL

Mar*_*ine 4 laravel laravel-4

有没有内置的方法来做这样的事情?

假设我有一个搜索页面,其中包含一些参数:

example.com/search?term=foo&type=user
Run Code Online (Sandbox Code Playgroud)

该网页上的链接会重定向到URL的typelink.我正在寻找一种方法来做到这一点,而无需手动构建URL.

编辑:
我可以手动构建URL,如下所示:

$qs = http_build_query(array(
    'term' => Input::get('term'),
    'type' => Input::get('type')
));
$url = URL::to('search?'.$qs);
Run Code Online (Sandbox Code Playgroud)

但是,我想知道的是,如果在Laravel中有一个更好的,内置的方法,因为当我想要更改其中一个值时,代码变得更加混乱.

为URL生成器提供第二个参数($parameters)将它们作为段添加到URL,而不是在查询字符串中.

cla*_*rkf 8

您可以使用URL Generator来完成此任务.假设搜索是命名路由:

$queryToAdd = array('type' => 'user');
$currentQuery = Input::query();

// Merge our new query parameters into the current query string
$query = array_merge($queryToAdd, $currentQuery);

// Redirect to our route with the new query string
return Redirect::route('search', $query);
Run Code Online (Sandbox Code Playgroud)

Laravel将从传递的数组中取出位置参数(这似乎不适用于此场景),并将其余的作为查询字符串附加到生成的URL.

请参阅:URLGenerator::route(), URLGenerator::replaceRouteParameters() URLGenerator::getRouteQueryString()


Bou*_*egh 5

我更喜欢本机PHP数组合并来覆盖一些参数:

['type' => 'link'] + \Request::all()
Run Code Online (Sandbox Code Playgroud)

要添加或覆盖type参数并删除另一个参数term

['type' => 'link'] + \Request::except('term')
Run Code Online (Sandbox Code Playgroud)

生成路由时的用法:

route('movie::category.show', ['type' => 'link'] + \Request::all())
Run Code Online (Sandbox Code Playgroud)


day*_*ees -3

输入组件还应包含查询参数。

IEInput::get('foo');