我尝试在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
操作。
答案 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
这样做不是'添加'路线的孩子,而是兄弟姐妹。