我的结构如下:
/modules
/module1
/module2
/module3
例如;站点A将使用module1
和module3
,但站点B将需要所有3个模块。我在初始引导期间知道这些数据,因此对于站点A来说,升级module2
似乎是浪费。有没有办法告诉Zend只能提升某些模块?
我目前正在添加这样的内容:
$front = Zend_Controller_Front::getInstance();
$front->addModuleDirectory(MODULE_PATH);
答案 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);
}