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

Ros*_*oss 21 php zend-framework2 zend-framework-routing zend-framework3

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

$this->url('users') -> /users
$this->url('users', ['sort' => 'desc']) -> /users?sort=desc
Run Code Online (Sandbox Code Playgroud)

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

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

dVa*_*ion 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);
Run Code Online (Sandbox Code Playgroud)

  • 祝福你!这让我疯了!对于想要在控制器中重定向的人,请尝试:`$ this-> redirect() - > toRoute("index/article",array("article_id"=> $ articleId),array("query"=> array(" param"=>"value")));` - 希望这会有所帮助!:) (11认同)

Mat*_*dak 11

这可以使用当前URL视图帮助程序yes来完成.

$this->url('users', [], array('query' => array('sort' => 'desc')))
Run Code Online (Sandbox Code Playgroud)

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


And*_*den 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',
        ),
    ),
),
Run Code Online (Sandbox Code Playgroud)

然后你可以组装$this->url('users/query', array('sort' => 'desc')).

不要忘记设置may_terminatetrue!

  • 不推荐使用查询路由 http://framework.zend.com/manual/current/en/modules/zend.mvc.routing.html#zend-mvc-router-http-query-deprecated (2认同)