Your browser (Internet Explorer 6) is out of date. It has known security flaws and may not display all features of this and other websites. Learn how to update your browser.
X
Post

Zend_ControllerでURLにアンダーバーを含める方法

Zend Frameworkネタです。



Zend_ControllerはZend FrameworkにおけるMVCの基本の部分で、
これを導入する事でリクエストURLに応じて対応するコントローラやアクションに振り分けます。
例えば、

http://mydomain.com/orders/

にアクセスするとコントローラ名「orders」、アクション名「index」と判定します。
このとき、コントローラディレクトリ下のOrdersController.phpを読み込み、
OrdersControllerクラスのindexActionメソッドを実行します。
(ZF-Exではこれに加えてmoduleディレクトリで分けているためもう少し階層深くなってます)

このようにしてリクエストURLに合わせてコントローラやアクションを決定しますが、
コントローラの名前にアンダーバーがあるとファイルの位置がややこしくなります。
例えば次のURLを使用したいとき、

http://mydomain.com/order_details/

これはコントローラ名「order_details」、アクション名「index」と判定します。
この時、ファイル名がOrder/DetailsController.php、クラス名がOrder_DetailController
と一つディレクトリを切らないとなりません。
Zend Frameworkの自動読み込み機能において、
アンダーバーがディレクトリ切る事を示しているためかと思います。


アクション名にアンダーバーを入れようとする時はまた少し事情が違い、
アクション名ではディスパッチ中にアンダーバーがなくなるようです。
例えば、

http://mydomain.com/orders/user_address

にアクセスするとコントローラ名は「orders」ですが、
アクション名が「useraddress」となり、アンダーバーがなくなります。
OrdersControllerクラス中にはuseraddressActionが必要になります。
また、

http://mydomain.com/orders/useraddress

にアクセスしても同じ結果になります。


URL中にアンダーバー入れようとするだけで
ディレクトリ構造意識しないとならなくなるっていうのは面倒でしょうがない。

ケースが少なければ個別にルーティング設定する事で回避できますが、
何かまとめて簡単にアンダーバー使えるようにする方法ないものかな……

TrackBack URL :

Leave a comment  

name

email

website

Submit comment