21

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

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

但是,这似乎不起作用(第二个助手实际上输出/users)。根据这个非官方的、过时的文档,曾经有一种方法可以通过附加/query到路由名称来做到这一点,但是这会产生一个找不到路由的异常。

这可以使用当前的 url 助手来完成吗?

4

3 回答 3

59

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

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

使用示例:

$name    = 'index/article';
$params  = ['article_id' => $articleId];
$options = [
        'query' => ['param' => 'value'], 
    ];
$this->url($name, $params, $options);
于 2013-03-14T23:50:52.630 回答
11

这可以使用当前的 URL 视图帮助器 yes 来完成。

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

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

于 2015-05-22T16:10:13.497 回答
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_terminatetrue

于 2012-10-08T18:22:59.093 回答