Zend \ Mvc \ Router \ Http \方法和子路由

时间:2013-03-21 17:32:24

标签: php routes zend-framework2

我已经定义了两条路线,/ 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?

1 个答案:

答案 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',
                            ),
                        ),
                    ),
                ),
            ),
        ),
    ),
),