Я определил два маршрута, / 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', ), ), ), ), ), ), ), ),