如何在ZF2 / ZF3 url视图助手中添加查询参数

时间:2012-10-08 15:54:11

标签: php zend-framework2 zend-framework3 zend-framework-routing

我尝试使用路由创建带有查询字符串的网址,如下所示:

$this->url('users') -> /users
$this->url('users', ['sort' => 'desc']) -> /users?sort=desc

然而,这似乎不起作用(第二个助手实际输出/users)。根据这个unofficial, out-of-date documentation,有一种方法可以通过将/query附加到路由名称来实现此目的,但是这会给出路由未找到的异常。

可以使用当前的url帮助程序完成吗?

3 个答案:

答案 0 :(得分:58)

从版本2.1.4开始,您遇到了用户错误

  

自ZF 2.1.4起不推荐使用查询路由;使用HTTP路由器的汇编方法的“查询”选项

用法示例:

$name    = 'index/article';
$params  = ['article_id' => $articleId];
$options = [
        'query' => ['param' => 'value'], 
    ];
$this->url($name, $params, $options);

答案 1 :(得分:11)

这可以使用当前URL视图帮助程序yes。

来完成
$this->url('users', [], array('query' => array('sort' => 'desc')))

您无需设置查询字符串子路由。只要您为“用户”设置了路径,就可以在控制器中查找“排序”参数,并在需要时使用。

答案 2 :(得分:10)

您可以为用户路线创建子路线,如下所示:

'users' => array(
    'type' => 'Literal',
    'options' => array(
        'route' => '/users',
        'defaults' => array(
            '__NAMESPACE__' => 'User\Controller',
            'controller' => 'Index',
            'action' => 'list',
        ),
    ),
    'may_terminate' => true,
    'child_routes'  => array(
        'query' => array(
            'type' => 'Query',
        ),
    ),
),

然后您可以汇编$this->url('users/query', array('sort' => 'desc'))

不要忘记将may_terminate设置为true