如何使用url_for或link_to帮助程序创建指向传递所有GET参数的同一页面的链接?
我有一个搜索页面,它接受多个参数作为过滤器来隐藏某些结果。例如,search.html?query=abc&people=1&groups=0
将搜索包含不是组的“abc”的所有项目。因此,我想要一个切换这些过滤器的链接,将其余参数保持不变到当前页面。在上面的示例中,将创建指向search.html?query=abc&people=1&groups=1
和search.html?query=abc&people=0&groups=0
的链接。
我想知道是否有任何方法可以将'this'指定为路由,这样如果路由或页面发生了变化,代码就不必这样了。
此外,如何将所有参数传递给助手?可以使用$sf_params
来访问所有参数,并且可以将'query_string'属性传递给帮助程序,但是有没有任何方法可以组合这两个手动创建字符串的方法?
答案 0 :(得分:1)
GET参数可以作为第三个参数中的数组传递给link_to
方法,或者传递给第二个参数中的url_for
。这说明如下:
link_to('Text to display', 'routename', array('group' => 0, 'people' => 1), $link_attributes);
url_for('routename', array('group' => 0, 'people' => 1));
这隐藏在源代码中。在这里,$params
是GET参数列表,以及要添加到标记的$options
HTML属性。
function link_to2($name, $routeName, $params, $options = array())
function url_for2($routeName, $params = array(), $absolute = false)
$sf_params
函数可以转换为合适的数组,以便与getAll()
一起传递。请参阅文档here。请注意,这与先前版本的Symfony不同。另请注意,您可能需要在模板中调用getRawValue()
:
$params = $sf_params->getRawValue()->getAll();
然后可以将 $sf_context->getInstance()->getRouting()->getCurrentRouteName()
作为$ routeName传递以获取当前路由。 感谢此{/ 3>}
答案 1 :(得分:-1)
将vars放入隐藏表单数据类型中以传递它们
<form action="page.php" method="GET">
<input name="people" type="hidden" value="<?php echo htmlspecialchars($_GET['people'], ENT_QUOTES); ?>">
<input name="groups" type="hidden" value="<?php echo htmlspecialchars($_GET['groups'], ENT_QUOTES); ?>">
<input name="query" type="text" value="some_data">
<input name="send" type="submit" value="send">
</form>