[ Zend Framework1 ] デフォルトモジュールを変更する(setDefaultModule)

Pocket

ここでは、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
    }
}

 

スポンサーリンク

Pocket

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>