【问题标题】:How can you add query parameters in the ZF2 / ZF3 url view helper如何在 ZF2 / ZF3 url view helper 中添加查询参数
【发布时间】:2012-09-28 21:47:57
【问题描述】:

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

    自 ZF 2.1.4 起已弃用查询路由;改用 HTTP 路由器组装方法的“查询”选项

    用法示例:

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

    【讨论】:

    • 祝福你!这让我发疯了!对于希望在您的控制器中重定向的任何人,请尝试:$this->redirect()->toRoute("index/article", array("article_id" => $articleId), array("query" => array("param" => "value"))); - 希望这会有所帮助! :)
    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

      您可以像这样为您的用户路由创建子路由:

      '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

      【讨论】:

      • 谢谢!这确实有效,除非当我使用 url($routeName, $params, true) 从父路由继承参数时,它会添加默认控制器和操作作为查询参数 - 有没有办法避免这种情况?
      • 有趣...它是否还添加了其他现有参数?还没有使用它,但也许有一些技巧可以在组装之前取消设置控制器和动作参数......
      猜你喜欢
      • 1970-01-01
      • 2011-05-12
      • 1970-01-01
      • 1970-01-01
      • 2019-12-19
      • 2018-06-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多