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, когда членов не существует. Но это не работает.


person Sandeep Kumar    schedule 18.11.2017    source источник


Ответы (1)


Ваша проблема заключается во втором маршруте, где вы определили members как параметр [/:members]. Вы должны изменить это на /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 целыми числами.

использованная литература

person Jannes Botis    schedule 18.11.2017