0

application.ini ではなく、Bootstrap.php を介してオプションのパラメーターを使用するように、アプリケーションのデフォルト ルートを変更したいと考えています。すべての「エスケープ」ルートを設定するのに苦労しています。複数のルートを設定する必要があるのか​​、それとも 1 つだけでよいのかさえわかりません。

ルートは次のようなものでなければなりません

":module/:area/:controller/:action"

ここで、:area はオプションであり、デフォルトで "public" に設定されています

したがって、http://www.example.com/my_module/my_controller/my_actionへのアクセスでは、FC プラグインを介して以下を取得できます。

$request->getParam('area') = "public"

そしてhttp://www.example.com/my_module/my_area/my_controller/my_actionで私は得る:

$request->getParam('area') = "my_area"

主な問題は、すべてのルートを作成して、デフォルトモジュール、インデックスコントローラー、およびインデックスアクションも渡されない場合にエスケープし、http://www.example.com/ をロードするとhttp://www.example.comと同じ値が返されることです。 /デフォルト/パブリック/インデックス/インデックス.

また、URL Helper を使用して内部 URL を生成したいのですが、この新しいデフォルト ルートで正しいアセンブリが尊重されます。

編集:デフォルトのルートにはモジュールのフェイルセーフが付属していると考えました。存在しない場合はデフォルトでコントローラーになりますが、URLの他の部分とモジュール自体で同様の動作を模倣する方法で作成するブートストラップ。

誰かが私に光を当てたり、実際の例をどこで見つけることができるかを提案したりできますか?

4

2 に答える 2

1

解決策は、実際に拡張Zend_Controller_Router_Route_Abstractして新しいルートハンドラーを作成し、URLを調べ、モジュール、エリア、コントローラー、およびアクションの存在を確認して、完全に機能するURLを構築するか、エラーコントローラーにディスパッチすることでした。

match()とメソッドの間で重い作業が行われ、モジュールに対して同様のタスクを実行assemble()するZendクラスを参照として使用しZend_Controller_Router_Route_Moduleましたが、モジュールがディスパッチャーに存在するかどうかを確認する代わりに、許可された領域のホワイトリストを作成しました。一致しない場合は、そのパス部分がコントローラーであり、次のアクションとそれ以降の部分がパラメーターであると見なします。

それは魔法のように機能しました!

于 2011-10-07T22:39:10.057 に答える
1

デフォルトのルーター設定と URL の組み立てを拡張Zend_Controller_Router_Rewriteおよび変更して->setRouter()から、 Zend_Controller_Front で を使用して、デフォルトの代わりに新しいルーター インスタンスを使用できます。class Zend_Controller_Router_Rewriteそうする前に、それを検索して学習してください。

于 2011-10-07T18:35:01.427 に答える