Zend \ Mvc \ Router \ Http \ Метод и дочерние маршруты

Я определил два маршрута, / 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 / не работает (ошибка 404 с POST и GET).

Когда я меняю тип из метода на литерал и удаляю ключ глагола, он работает.

Как я могу использовать Zend \ Mvc \ Router \ Http \ Method в дочернем маршруте?

Вам нужно установить may_terminate true для вашего детского маршрута.

Кроме того, вы указываете, что маршрут не работает для GET, что будет, если вы только установите глагол для post , если вы хотите разрешить слишком, глагол должен быть 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', ), ), ), ), ), ), ), ),