我已经定义了两条路线,/ shoppingcart /和一条子路线/ shoppingcart / add /,它们只能用于POST请求。
'routes' => array(
'shoppingcart' => array(
'type' => 'literal',
'options' => array(
'route' => '/shoppingcart/',
'defaults' => array(
'controller' => 'ShoppingcartController',
'action' => 'shoppingcart',
),
),
'may_terminate' => true,
'child_routes' => array (
'add-product' => array(
'type' => 'method',
'options' => array(
'verb' => 'post',
'route' => 'add/',
'defaults' => array(
'controller' => 'ShoppingcartController',
'action' => 'addProductToShoppingcart',
),
),
),
)
),
)
路线/购物车/工作正常。子路由/ shoppingcart / add /不起作用(POST和GET 404错误)。
当我将类型从方法更改为文字并删除动词键时,它可以正常工作。
如何在子路由中使用Zend \ Mvc \ Router \ Http \ Method?
答案 0 :(得分:3)
您需要为您的子路线设置may_terminate
为真。
另外,你提到了GET的路由失败,如果你只想将动词设置为post
,它就会失败,如果你也想允许get
,动词应该是get,post
< / p>
编辑:经过一些小试验后,事实证明我的理解是错误的,Method
类型需要被放置为它所保护的路线的父级....
'routes' => array(
'shoppingcart' => array(
'type' => 'literal',
'options' => array(
'route' => '/shoppingcart/',
'defaults' => array(
'controller' => 'ShoppingcartController',
'action' => 'shoppingcart',
),
),
'may_terminate' => true,
'child_routes' => array (
'add-product' => array(
'type' => 'method',
'options' => array(
'verb' => 'get,post',
),
'child_routes' => array(
// actual route is a child of the method
'form' => array(
'may_terminate' => true,
'type' => 'literal',
'options' => array(
'route' => 'add/',
'defaults' => array(
'controller' => 'ShoppingcartController',
'action' => 'addProductToShoppingcart',
),
),
),
),
),
),
),
),