【问题标题】:ZF2 Restful hierarchical routesZF2 Restful 分层路由
【发布时间】:2016-05-05 17:34:49
【问题描述】:

我正在尝试将 ZF2 中的分层资源用于 Restful API。该资源应类似于clients/1/addresses。我试过的是这个

'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调用AddressControllerget方法,而不是getList,我认为这是因为Zend明白客户端的id属于地址,所以它的调用get 方法。

你知道如何处理吗?

【问题讨论】:

    标签: php rest routing zend-framework2 hierarchical


    【解决方案1】:

    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' );
    

    这只是一个例子,最好的方法是(当然)使用控制器工厂......

    【讨论】:

      猜你喜欢
      • 2015-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-20
      相关资源
      最近更新 更多