2016-05-02 10 views
1

ZF2ルーティングでは、すべてのパブリックアクションに一致する一般的な親ルートを持ち、特定のエリアをカスタムの子ルートとコントローラで上書きできますか?私は自分のニーズに合った任意の構成を考え出すことができなかった子と親が一致する場合、ZF2は子ルートを使用する

/parent => matches parent controller 
/parent/edit => matches parent controller editAction 
/parent/childsection => matches child controller 
/parent/childsection/edit => matches child controller editAction 

:私は何をしたい

。設定後、私はうまくいくと思ったが、ZF2ルートは親ルートで終わるので、childsectionもアクションになる可能性がある。

'parent' => array(
    'type' => 'Segment', 
    'may_terminate' => true, 
    'options' => array(
     'route' => '/parent[[/:action][/:id]]', 
     'constraints' => array(
      'action' => '[a-zA-Z][a-zA-Z0-9_-]*', 
      'id' => '[0-9]+', 
     ), 
     'defaults' => array(
      'controller' => 'Application\Controller\Parent', 
      'action' => 'index', 
     ), 
    ), 
    'child_routes' => array(
     'child' => array(
      'type' => 'Segment', 
      'options' => array(
       'route' => '/childsection/:action[/:id]', 
       'constraints' => array(
        'action' => '[a-zA-Z][a-zA-Z0-9_-]*', 
        'id' => '[0-9]+', 
       ), 
       'defaults' => array(
        'controller' => 'Application\Controller\Child', 
       ), 
      ), 
     ), 
    ), 
), 

親のリテラルルートと2つの子ルート(1つはジェネリック、1つは子セクションに固有)です。しかしこの場合、私はリダイレクトやURLを生成する必要があります。->toRoute('parent/default'...)

他に優雅なソリューションがありますか?これは簡単ではありませんか?

答えて

0

私は、コントローラ/アクションにこのような正規表現を使用すべきでないことを常に人々に伝えます。代わりに(編集|削除)のように制限されたものを使用して、リストにホワイトリストに追加されたアクションを追加してください。

+0

あなたは正確に人々にこれを行うように言う理由を説明できますか? 私は新しいアクションを追加したいと思ったら、私はそれらの表現が好きです。そして、 '... Action'で終わるパブリックメソッドを追加すると、設定を掘り下げずに自動的にアクセスできるようにしたいのです。 コメントをいただきありがとうございますが、これは私の現在のアプローチに代わるものです。 –

0

あなたはいつもbarは、bazbingは、アクション、子コントローラと子アクションも、あなたがちょうど行ったような制約とそれらを定義します

route => /foo[/:bar[/:baz[/:bing]]] 

ような何かを行うことができます。私はこのルートをSupervisorControllersuperviseActionでマップします。

このアクションは、指定されたルーテール名と一致するコントローラーが存在するかどうか、そしてこのコントローラーに所定のアクションがあるかどうかを確認します。その後、コントローラをフェッチして、単にアクションを呼び出すことができます。

@ grizzm0と同じように、これは不正です。それは非常にエラーが発生しやすく、ある時点でどこに派遣されているのか分からないこともあります。私の個人的な好み(そして、自分のスタイルを知っている限り、私のサークルの周りのほとんどの人のもの)は、時間をかけて手作業ですべてのルートを設定するだけです。

これはちょっとした作業ですが、あなたは常に何が起こっているのか知っています。時々、より少ない魔法がより多くあります!

+0

さて、私はあなた自身が言ったように、エラーが発生しやすく、実際には透過的であるため、すべてのものを別のコントローラでルーティングしたくありません。この場合、私は現在の実装(子コントローラの1つの子ルートと他のすべての親アクションの1つの子ルート)が好きです。しかし、私はgonny grizzm0の提案を試してみたいと思う –

関連する問題