Zend Framework のディレクトリ構成はデフォルトでは以下のようになっている。
http://framework.zend.com/manual/ja/zend.controller.html#zend.controller.quickstart.go
application/ controllers/ IndexController.php models/ views/
簡単なシステムだと、controllers の配下にcontroller ファイルを設置すれば良いが、
ファイルが多くなってくると、controllers にファイル数が多くなってメンテし難くなる。
そこで、以下のようなディレクトリ構成にしてみる。
application/ modules index controllers/ IndexController.php models/ views/ youtube controllers/ IndexController.php views/
この場合だと、モジュール単位で構成されるので、メンテしやすくなる。
ただし、このままだとディスパッチャが アクションコントローラを探せなくなり、Zend_Controller_Exception が発行されてしまう。
そこで、以下のように設定する。
http://framework.zend.com/manual/ja/zend.controller.modular.html
<?php $front = Zend_Controller_Front::getInstance(); $front->setControllerDirectory(array( 'default' => 'pathto/modules/index/controller', 'youtube' => 'pathto/modules/youtube/contoller' )); $front->dispatch();
※ setControllerDirectory() の引数はベタで書くより、設定ファイルにコントローラへのパスを記述して読み込み、設定している。
アクションコントローラの記述
デフォルトのディレクトリ構成から変更した場合、
アクションコントローラのクラス名も変更する必要がある。
※ default で設定したアクションコントローラとそれ以外は形式がことなる。
ここではIndexContollerはデフォルトになるので、デフォルトのIndexControllerは以下のようなクラス名になる。
application/modules/index/controller/IndexController.php
<?php class IndexController extends My_Controller_Action { public function indexAction() { } public function fooAction() { } }
※ My_Controller_Action はZend_Controller_Action から継承したクラス。
default ではない youtube というcontroller は次のようになる。
application/modules/youtube/controller/IndexController.php
<?php class Youtube_IndexController extends My_Controller_Action { public function indexAction() { } public function fooAction() { } }
アクセスする URL
アクセスする URL は以下のようになる。
default に設定してあるコントローラの場合は、従来通りの、
http://ドメイン名/コントローラ名/アクション名/ となる。
application/modules/index/controller/IndexController.php indexAction http://localhost/ http://localhost/index http://localhost/index/index fooAction http://localhost/index/foo
default に設定したコントローラ以外は以下の形式。
http://ドメイン名/モジュール名/コントローラ名/アクション名 となる。
application/modules/youtube/controller/IndexController.php
indexAction http://localhost/youtube http://localhost/youtube/index/index fooAction http://localhost/youtube/index/foo
Zend Framework のドキュメントは細かく書かれていて分かりやすい。
逆に規約外の事をやろうとするとハマる場合が多い。