3

ZF2 中的路由发布数据

我尝试在 zf2 中设置路由,其中​​路由的所有发布数据都/connection/add使用此 yaml 配置路由到单独的方法:

router:
  routes:
    home:
      type: literal
      options:
        route: '/'
        defaults:
          controller: Admin\Dashboard
          action:     index

    connection:
      type: literal
      options:
        route: '/connection'
        defaults:
          controller: Admin\Connection
          action:     list

      may_terminate: true
      child_routes:
        add:
          type: literal
          options:
            route: '/add'
            defaults:
              action: add

          may_terminate: true
          child_routes:
            post:
              type: method
              options:
                verb: post
                defaults:
                  action: test

上面示例中的所有内容都可以正常工作,除了使用Zend\Mvc\Router\Http\Methodpost类型的最深的孩子

预期输出:

当一个人向 rout 提交帖子数据时/connection/add,该人将被路由到该test操作。

实际输出:

上述路由中的最后一个子节点将被忽略,并且add在调度从表单发送的 post 数据时仍会调用该操作。

问题:

  • 我错过了什么?
  • 有没有办法在我的应用程序中使用这种路由?
  • 如果是这样,配置看起来如何?
4

2 回答 2

6

这实际上是可能的,它只需要更明确的配置。

您的示例不起作用的原因是路由器成功匹配了您的“添加”路由,并且只是返回那里而没有向前看。您必须通过将“may_terminate”设置为 false 并明确定义要在 child_routes 中处理的所有方法来告诉它它不能在那里终止。

    add:
        type: Literal
        options:
            route: '/add'
            defaults:
                action: add
        may_terminate: false
        child_routes:
            post:
                type: method
                options:
                    verb: post
                    defaults:
                        action: test
            everythingelse:
                type: method
                options:
                    verb: 'get,head,put,delete'
                    defaults:
                        action: add

请记住,关键是将 'may_terminate' 设置为 false,这样路由器就不会过早返回匹配项。

于 2013-04-04T18:11:31.863 回答
0

这可能是因为您将它作为 add 路由的子级,也许尝试将它添加到同一级别而不是作为子级?

 child_routes:
    add:
      type: literal
      options:
        route: '/add'
        defaults:
          action: add
      may_terminate: true
    post:
      type: method
      options:
        verb: post
        defaults:
          action: test
      may_terminate: true

使它不是“添加”路线的孩子,而是兄弟姐妹。

于 2013-01-29T08:51:34.313 回答