Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php zend framework仅支持特定于引导的模块_Php_Zend Framework - Fatal编程技术网

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);
}