1

我已经定义了两条路线,/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/ 工作正常。子路由 /shoppingcart/add/ 不起作用(POST 和 GET 出现 404 错误)。

当我将类型从方法更改为文字并删除动词键时,它可以工作。

如何在子路由中使用 Zend\Mvc\Router\Http\Method ?

4

1 回答 1

3

您需要may_terminate为您的子路线设置 true 。

此外,您提到 GET 的路由失败,如果您只将动词设置为post,如果您也想允许get,动词应该是get,post

编辑:经过一些试验,事实证明我的理解是错误的,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',
                            ),
                        ),
                    ),
                ),
            ),
        ),
    ),
),
于 2013-03-21T18:12:57.623 回答