Zend Framework を使用したルート チェーン
-
05-07-2019 - |
質問
作業中の Zend Framework サイトの管理パネルにルート チェーンを実装しようとしています。「admin」ルートが「/admin」でルーティングされ、「adminLogin」ルートが「/admin/login」でルーティングされることを期待して、次の構成ファイルを使用しています。
<?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」はデフォルトのモジュール/コントローラー/アクションにルーティングされます。
チェーンの仕組みに何か欠けているのではないかと思います。フィードバックは大歓迎です
解決
チェーンの親ルート (この場合、 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>
見る 私の古い答え 連鎖ルートの詳細と注意事項については、こちらをご覧ください。
また、ルーターはチェーンされたルート名をダッシュで自動的に連結するため、ログイン ルートを明示的に使用する必要がある場合は、現時点では次の名前が付けられることにも注意してください。 admin-adminLogin
. 。単純に名前を変更することをお勧めします login
.
他のヒント
これは、バグが原因で動作しなくなる可能性があります。ただし、回避策があります。
これはチェーンの誤った使用です。
/ adminのルートと、/ admin / loginのルートを宣言するだけです。複数のルートクラスを使用して1つのルート(ホスト名やパスなど)の解決を決定している場合、チェーンはより便利です。