zend框架只有bootstrap特定的模块

时间:2011-03-14 20:25:54

标签: php zend-framework

我的结构如下:

/modules
 /module1
 /module2
 /module3

例如;站点A将使用module1module3,但站点B将需要所有3个模块。我在初始引导期间知道这些数据,因此对于站点A来说,升级module2似乎是浪费。有没有办法告诉Zend只能提升某些模块?

我目前正在添加这样的内容:

    $front = Zend_Controller_Front::getInstance();
    $front->addModuleDirectory(MODULE_PATH);

3 个答案:

答案 0 :(得分:1)

没有。你不能。好吧,你可以 - 只添加你需要的模块 - 即:制作一个预路由器;)

但是从模块的概念来看,只运行一些引导是没有意义的。您需要运行引导程序,以便添加来自模块的路由...例如;)

答案 1 :(得分:1)

我的理解是,即使您为每个模块都有特定的引导,每个引导程序(包括您未使用的模块)都会触发。这是因为bootstraps是一个“准备”类。你可以做的是创建插件,并测试正在使用的模块。

http://weierophinney.net/matthew/archives/234-Module-Bootstraps-in-Zend-Framework-Dos-and-Donts.html

Matthew Weier O'Phinney解释了为什么这样做。

我会尽量减少模块中的bootstraping数量,并为任何可以外包的代码提供插件。

例如,我希望某个模块在执行时禁用布局,所以我没有在其boostrap中执行此操作,而是创建了一个插件,并测试是否正在使用该模块。

class Custom_Module_Plugin_DisableLoadLayout extends Zend_Controller_Plugin_Abstract {
    /*
     * @param Zend_Controller_Request_Abstract $request
     */
    public function preDispatch(Zend_Controller_Request_Abstract $request) {
            $module = $request->getModuleName();
            $layout = Zend_Layout::getMvcInstance();

            if($module == 'load'){
                $layout->disableLayout();
            }
}
}

如果你熟悉插件,你知道插件通过前控制器在每次加载时触发,所以你基本上可以有一个插件,并测试模块名称,并采取相应的行动。

答案 2 :(得分:1)

因为你暗示你知道每个站点需要哪些模块,所以假设你在数组$ modules中有这些模块。然后就像在引导程序中这样做一样简单:

$front = Zend_Controller_Front::getInstance();
foreach ($modules as $module) {
    $front->addControllerDirectory(APPLICATION_PATH."/modules/$module/controllers", $module);
}