Zend Framework - маршрутизация одних и тех же маршрутов на разные контроллеры
У меня есть два маршрута, и я хочу сопоставить оба маршрута, когда в запросе есть какой-то параметр.
Маршрут 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,
],
Я хочу использовать CompanyMembersController, когда члены существуют в запросе, и CompaniesController, когда члены не существуют. Но это не работает.
1 ответ
Ваша проблема во втором маршруте, где вы определили членов как параметр [/: 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 для целых чисел.