2016-01-28 2 views
0

Я пытаюсь использовать иерархический ресурс в ZF2 для Restful API. Ресурс должен выглядеть как clients/1/addresses. То, что я попытался был этоZF2 Неустойчивые иерархические маршруты

'clients' => array(
    'type' => 'segment', 
    'options' => array(
     'route' => '/clients[/:id]', 
     'constraints' => array(
      'id'  => '[0-9]+', 
     ), 
     'defaults' => array(
      'controller' => 'Api\Controller\ClientController', 
     ), 
    ), 
    'may_terminate' => true, 
    'child_routes' => array(
     'addresses' => array(
      'type' => 'segment', 
      'options' => array(
       'route' => '/addresses[/:address_id]', 
       'constraints' => array(
        'address_id'  => '[0-9]+', 
       ), 
       'defaults' => array(
         'controller' => 'Api\Controller\AddressController', 
       ), 
      ), 
     ), 
    ), 
), 

Существует этот конфликт как идентификаторы, но я не знаю, если я переименовать идентификатор маршрута id из адресов ресурсов, как я разрешу его. Во всяком случае, реальная проблема заключается в том, что маршрут clients/1/addresses вызывает метод getAddressController, а не getList, и я думаю, это потому, что Зенд понимает, что идентификатор клиента принадлежит адресам, поэтому его вызовы получают метод get.

Вы знаете, как бороться с этим?

ответ

2

Возможно, вы правы, что get вызывается вместо getList из-за того, что в вашем маршруте присутствуют id и the controller by default uses 'id' for matching the route identifier.

Способ справиться с этим заключается в том, что вы указываете имена идентификаторов маршрутов, которые соответствуют ресурсу. Поэтому для клиента вы делаете client_id, а для адреса вы используете address_id (как и вы уже сделали).

А потом настроить AbstractRestfulController экземпляр «смотреть» для правильного идентификатора маршрута using the setIdentifierName method:

$clientController->setIdentifierName('client_id'); 

$addressController->setIdentifierName('address_id'); 

Это просто пример, лучший способ сделать это (конечно) с помощью контроллера завод ...

Смежные вопросы