1

/shoppingcart/ と、POST リクエストでのみ使用できる子ルート /shoppingcart/add/ の 2 つのルートを定義しました。

        '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 に答える