2017-11-18 142 views
0

我有兩個路由,並希望匹配兩個路由時,請求中存在一些參數。Zend框架 - 路由相同的路由到不同的控制器

路線1:

  'companies' => [ 
      'type' => Segment::class, 
      'options' => [ 
       'route' => '/api/v1/companies[/:id]', 
       'defaults' => [ 
        'controller' => V1\Rest\Controller\CompaniesController::class, 
       ] 
      ], 
      'priority' => 2, 
      'may_terminate' => true, 
     ], 

路線2:

  'company_members' => [ 
      'type' => Segment::class, 
      'options' => [ 
       'route' => '/api/v1/companies[/:id][/:members][/:member_id]', 
       'defaults' => [ 
        'controller' => V1\Rest\Controller\CompanyMembersController::class, 
       ] 
      ], 
      'priority' => 2, 
      'may_terminate' => true, 
     ], 

欲當成員存在於請求和CompaniesController使用CompanyMembersController當成員犯規存在。但它不是加工。

回答

0

您的問題是在第二條路線,您定義成員作爲參數[/:members]。您應該將其更改爲/成員

我也會建議你的路線參數使用約束。你的路線應該是這樣的:

'companies' => [ 
    'type' => Segment::class, 
    'options' => [ 
     'route' => '/api/v1/companies[/:id]', 
     'defaults' => [ 
      'controller' => Controller\CompaniesController::class, 
      'action'  => 'index', 
     ], 
     'constraints' => [ 
      'id' => '\d+' 
     ] 
    ], 
    'priority' => 2, 
    'may_terminate' => true, 
], 
'company_members' => [ 
    'type' => Segment::class, 
    'options' => [ 
     'route' => '/api/v1/companies[/:id]/members[/:member_id]', 
     'defaults' => [ 
      'controller' => Controller\CompanyMembersController::class, 
      'action'  => 'index', 
     ], 
     'constraints' => [ 
      'id' => '\d+', 
      'member_id' => '\d+', 
     ] 
    ], 
    'priority' => 2, 
    'may_terminate' => true, 
], 

你也可以看到約束將參數ID & member_id爲整數。