Php zend framework仅支持特定于引导的模块
我的结构如下:Php zend framework仅支持特定于引导的模块,php,zend-framework,Php,Zend Framework,我的结构如下: /modules /module1 /module2 /module3 比如,;站点A将使用模块1和模块3,但站点B将需要所有3个模块。我在初始引导时知道这些数据,所以站点a引导module2似乎是一种浪费。有没有办法让Zend只提升某些模块 我目前正在添加以下内容: $front = Zend_Controller_Front::getInstance(); $front->addModuleDirectory(MODULE_PATH); 不,你
/modules
/module1
/module2
/module3
比如,;站点A将使用模块1
和模块3
,但站点B将需要所有3个模块。我在初始引导时知道这些数据,所以站点a引导module2
似乎是一种浪费。有没有办法让Zend只提升某些模块
我目前正在添加以下内容:
$front = Zend_Controller_Front::getInstance();
$front->addModuleDirectory(MODULE_PATH);
不,你不能。好的,你可以-只添加你需要的模块-例如:制作一个预路由器;)
但是从模块的概念来看,只运行一些引导是没有意义的。您需要启动才能运行,以便添加来自模块的路由。。。例如;) 我的理解是,即使每个模块都有特定的引导,每个引导(包括您未使用的模块)都将启动。这是因为引导是一个“准备”类。您可以做的是创建插件,并测试正在使用的模块
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();
}
}
}
Matthew Weier O'Phinney解释了为什么这样做
我会尽量减少模块中的引导量,并为任何可以外包的代码提供插件
例如,我想让某个模块在执行时禁用布局,所以我没有在它的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();
}
}
}
如果您熟悉插件,那么您知道插件会通过frontcontroller在每次加载时启动,因此您基本上可以有一个插件,并测试模块名称,然后相应地执行操作。因为您暗示您知道每个站点需要哪些模块,所以假设您在$modules数组中有这些模块。然后,只需在引导程序中执行以下操作:
$front = Zend_Controller_Front::getInstance();
foreach ($modules as $module) {
$front->addControllerDirectory(APPLICATION_PATH."/modules/$module/controllers", $module);
}