ZF2 |使用Zend \ Mvc \ Router \ Http \ Method路由发布数据

时间:2013-01-22 07:14:53

标签: url-routing zend-framework2

在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\Method

类型的最深的孩子post除外

预期输出:

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

实际输出:

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

问题:

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

2 个答案:

答案 0 :(得分: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,这样路由器就不会过早返回匹配。

答案 1 :(得分:0)

这可能是因为你已经把它作为添加路线的孩子了,也许尝试将它添加到同一级别而不是孩子身上?

 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

这样做不是'添加'路线的孩子,而是兄弟姐妹。