ここでは、Zend Framework1 において、モジュールディレクトリを構成する場合やデフォルトモジュールを変更する設定例などを掲載しています。
スポンサーリンク
モジュール構成を採用する
ZendFramework においてモジュール構成を採用する場合には、application.ini に、以下のようにモジュールディレクトリを設定するだけです。
application.ini の設定例
bootstrap.path = APPLICATION_PATH "/modules/default/Bootstrap.php" bootstrap.class = "Bootstrap" appnamespace = "Application" resources.frontController.moduleDirectory = APPLICATION_PATH "/modules" resources.modules[] =
デフォルトモジュールを変更する
モジュール構成とした場合、クライアントから URL のモジュール名を省略して呼び出された場合に、デフォルトモジュール(default)が呼び出されることになります。デフォルトモジュールを変更するには、同じく application.ini に、 resources.frontController.defaultmodule を設定して、モジュール名省略時(URL)に呼び出されるモジュールを変更することができます。次の例ではモジュール名を newmodule に変更しています。
bootstrap.path = APPLICATION_PATH "/modules/newmodule/Bootstrap.php" ← 変更 bootstrap.class = "Bootstrap" appnamespace = "Application" resources.frontController.moduleDirectory = APPLICATION_PATH "/modules" resources.frontController.defaultmodule = "newmodule" ← 追加 resources.modules[] =
プログラムからデフォルトモジュールの変更を行う
プログラムからデフォルトモジュールの変更を行う場合は、次のように Zend_Controller_Front::setDefaultModule メソッドを呼び出すことで変更可能です。
// デフォルトモジュールを設定する $front = Zend_Controller_Front::getInstance(); $front->setDefaultModule('モジュール名');
Zend_Application_Bootstrap_Bootstrap を継承する
デフォルトモジュールを変更した場合は、モジュール名が変更される意外に特に影響することはありませんが、デフォルトモジュール(前述サンプルでは newmodule )の Bootstrap.php は Zend_Application_Module_Bootstrap を継承して作成するのではなく、Zend_Application_Bootstrap_Bootstrap を継承して作成しなければなりません。
また、default ディレクトリがモジュールディレクトリ内に残ったままである場合は、存在するモジュールとして処理されてしまいますので、多くのケースでは削除しておくことになると思います。
継承クラスNG(Zend_Application_Module_Bootstrap )
/* * NG */ class Bootstrap extends Zend_Application_Module_Bootstrap { /** * プラグインの登録 */ protected function _initRegisterPlugins() { $obj = null; /* 何か初期化処理 */ return $obj } }
継承元クラスを間違うと、次のようにエラーが発生してしまいます。
Fatal error: Uncaught exception ‘Zend_Application_Bootstrap_Exception’ with message ‘No default controller directory registered with front controller’ in library\Zend\Application\Bootstrap\Bootstrap.php on line 91
継承クラスOK(Zend_Application_Bootstrap_Bootstrap )
/* * OK */ class Bootstrap extends Zend_Application_Bootstrap_Bootstrap { /** * プラグインの登録 */ protected function _initRegisterPlugins() { $obj = null; /* 何か初期化処理 */ return $obj } }