0

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',
                 ],
             ]
         ]
     ]
 ]

親ルートと子ルートの両方に「アクション」パラメーターがあります。この構成は、直接呼び出された場合 (つまり、ブラウザーで URL "/dossier/edit/3/droit/delete/2" を入力した場合) に正常に機能しています。ただし、 viewHelper Url を使用して URL を構築します。

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

URL を生成します:

/dossier/delete/3/droit//2

URL の代わりに、作成 (「追加」) ビューを表示している間:

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

トピックZf2 view helper URL child route with same paramsから、子アクションごとに 1 つの子ルートを作成できることがわかっているため、2 番目の「アクション」パラメータを取り除くことができますが、これは正しくないようです。

ZF の URL をコントローラ メソッドにルーティングする方法を壊さずに「アクション」パラメータの名前を変更する方法がないため、Segment 型の親ルートと子ルートの両方を保持できるのに、なぜスタックしたままなのか不思議に思わずにはいられません。

ルート「droit」は、ドシエの ID が必要なため、「ドシエ」の子ルートである必要があります (フォームの隠し入力にドシエの ID を入れると、さらに悪い解決策のように思えます)。

何か不足していますか?より良い解決策はありませんか?

4

0 に答える 0