2009-07-29 7 views
3

私が取り組んでいるZend Frameworkサイトの管理パネルのルートチェインを実装しようとしています。私は、 "admin"ルートが "/ admin"でルートし、 "adminLogin"ルートが "/ admin/login"でルートすることを期待して、次の設定ファイルを使用しています。Zend Frameworkによるルートチェイン

<?xml version="1.0" encoding="UTF-8"?> 
<routes> 
    <admin> 
     <route>admin</route> 
     <defaults> 
      <module>admin</module> 
      <controller>index</controller> 
      <action>index</action> 
     </defaults> 
     <chains> 
      <adminLogin> 
       <route>login</route> 
       <defaults> 
        <module>admin</module> 
        <controller>login</controller> 
        <action>index</action> 
       </defaults> 
      </adminLogin> 
     </chains> 
    </admin> 
</routes> 

この設定では、「adminLogin」のみが動作します。ルート "admin"はデフォルトモジュール/コントローラ/アクションにルーティングされます。

私は連鎖がどのように機能するかについて何か不足していると思います。 フィードバックは非常に高く評価されています

+0

ので、ルート 'admin'は一致していない、とあなたは' /デフォルトモジュールのインデックスコントローラのindexアクションを取得admin'に移動しようとすると? – jason

+0

それはまさに何が起こるかです。 –

答えて

1

チェーンの親ルート(この場合はadmin)は、実際のルートと実際には一致しません。その唯一の目的は、トップレベルの一致をキャッチし、そのチェーンされた子どもが実際のルーティングを処理できるようにします。

は、明示的にそうように、あなたのチェーンの先頭に空のスタティックルートを追加してみてください:

<chains> 
    <index type="Zend_Controller_Router_Route_Static"> 
     <route></route> 
     <defaults module="admin" controller="index" action="index" /> 
    </index> 
    <login> 
     <route>login</route> 
     <defaults> 
       <module>admin</module> 
       <controller>login</controller> 
       <action>index</action> 
     </defaults> 
    </login> 
</chains> 

は、いくつかの詳細と連鎖したルートの落とし穴のためan older answer of mineを参照してください。

また、ルータが自動的に連鎖したルート名をダッシュ​​で連結していることに注意してください。したがって、ログインルートを明示的に使用する必要がある場合は、現在はadmin-adminLoginとなります。単純にloginに改名することをお勧めします。

-2

これはチェーンの間違った使用です。

/adminのルートと/ admin/loginのルートを宣言するだけです。 1つのルートの解像度(ホスト名やパスなど)を決定するために複数のルートクラスを使用している場合は、チェーンがより便利です。

+0

これは実際には鎖の本当に良い使用です。今度は、親チェーンのルートパラメータを変更するだけで、管理者セクション全体のベースURLを変更できます。それだけです。アプリの残りの部分が気にするルート名です。 – jason

+0

これは鎖の使用が完全に正しいです。複数のルートクラスを使用しなくてもチェーンを非常に便利にすることができます。 – Bittarman