Php ZF2 Restful分层路由
我正在尝试将ZF2中的分层资源用于Restful API。该资源应类似于Php ZF2 Restful分层路由,php,rest,routing,zend-framework2,hierarchical,Php,Rest,Routing,Zend Framework2,Hierarchical,我正在尝试将ZF2中的分层资源用于Restful API。该资源应类似于客户端/1/地址。我试过的就是这个 'clients' => array( 'type' => 'segment', 'options' => array( 'route' => '/clients[/:id]', 'constraints' => array( 'id' => '[0-9]+',
客户端/1/地址
。我试过的就是这个
'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都有冲突,但我不知道是否像我那样重命名资源地址的路由标识符id
,就能解决这个问题。无论如何,真正的问题是路由clients/1/addresses
调用AddressController
的get
方法,而不是getList
,我认为这是因为Zend知道客户端的id属于地址,所以它调用get方法
您知道如何处理此问题吗?您可能是对的,因为
id
存在于您的路线匹配参数中,因此调用get
而不是getList
处理这一问题的方法是,提供适合资源的路由标识符名称。所以对于客户,您使用客户id
,对于地址,您使用地址id
(就像您已经做的那样)
然后将AbstractRestfulController
实例配置为“查找”正确的路由标识符:
这只是一个例子,最好的方法是(当然)通过使用控制器工厂…您可能是对的,调用
get
而不是getList
,因为id
存在于路由匹配参数中
处理这一问题的方法是,提供适合资源的路由标识符名称。所以对于客户,您使用客户id
,对于地址,您使用地址id
(就像您已经做的那样)
然后将AbstractRestfulController
实例配置为“查找”正确的路由标识符:
这只是一个例子,最好的方法是(当然)使用控制器工厂
$clientController->setIdentifierName( 'client_id' );
$addressController->setIdentifierName( 'address_id' );