在Symfony中使用请求参数创建与同一页面的链接

时间:2011-08-03 17:32:25

标签: php symfony1 symfony-1.4 httprequest

如何使用url_for或link_to帮助程序创建指向传递所有GET参数的同一页面的链接?

我有一个搜索页面,它接受多个参数作为过滤器来隐藏某些结果。例如,search.html?query=abc&people=1&groups=0将搜索包含不是组的“abc”的所有项目。因此,我想要一个切换这些过滤器的链接,将其余参数保持不变到当前页面。在上面的示例中,将创建指向search.html?query=abc&people=1&groups=1search.html?query=abc&people=0&groups=0的链接。

我想知道是否有任何方法可以将'this'指定为路由,这样如果路由或页面发生了变化,代码就不必这样了。

此外,如何将所有参数传递给助手?可以使用$sf_params来访问所有参数,并且可以将'query_string'属性传递给帮助程序,但是有没有任何方法可以组合这两个手动创建字符串的方法?

2 个答案:

答案 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>