Расширенная маршрутизация ZF3 - родительские и дочерние маршруты с параметром действия - PullRequest
0 голосов
/ 18 марта 2019

Используя ZF3, я хотел бы получить доступ к URL-адресам, таким как:

/dossier/add
/dossier/edit/2
/dossier/edit/2/droit/add
/dossier/edit/2/droit/edit/3
...

Вот моя конфигурация маршрутизации:

'dossier' => [
     'type' => Segment::class,
     'options' => [
         'route' => '/dossier[/][:action][/:dosid]',
         'constraints' => [
             'action' => '[a-zA-Z0-9_-]+',
             'dosid' => '[0-9_-]*|b[0-9]+|all'
         ],
         'defaults' => [
             'controller' => Controller\DossierController::class,
             'action'     => 'add',
         ],
     ],
     'may_terminate' => true,
     'child_routes' => [
         'droit' => [
             'type' => Segment::class,
             'options' => [
                 'route' => '/droit[/][:action][/:droid]',
                 'constraints' => [
                     'action' => '[a-zA-Z0-9_-]+',
                     'droid' => '[0-9_-]*|b[0-9]+|all'
                 ],
                 'defaults' => [
                     'controller' => Controller\DroitController::class,
                     'action'     => 'add',
                 ],
             ]
         ]
     ]
 ]

И у родительских, и у дочерних маршрутов есть параметр "action",Этот конфиг работает нормально, когда вызывается напрямую (то есть ввод URL "/ dossier / edit / 3 / droit / delete / 2" в браузере).Однако при создании URL-адреса с помощью URL-адреса viewHelper:

$this->url('dossier/droit', ['action' => 'delete', 'dosid' => 3, 'droid' => 2]);

создается URL-адрес:

/dossier/delete/3/droit//2

при отображении представления создания («добавления») вместо URL-адреса:

/dossier/edit/3/droit/delete/2

Из темы Zf2-просмотр вспомогательного URL дочернего маршрута с теми же параметрами , я знаю, что могу создать один дочерний маршрут для каждого дочернего действия, следовательно, избавиться от второго параметра "действия", но это не такКажется, совершенно правильно.

Я не могу не задаться вопросом, почему я мог бы иметь и родительский и дочерний маршрут типа Сегмент и все еще зависать, потому что нет способа переименовать параметр "action" без прерыванияСпособ ZF для маршрутизации URL-адресов к методам контроллера.

Маршрут «droit» должен быть дочерним маршрутом «досье», так как для этого требуется идентификатор досье (и помещение идентификатора досье в скрытый ввод в формекажется еще худшим решением).

Я что-то упустил?Нет ли лучшего решения?

...