首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Zend框架-模块-仅引导当前模块

Zend框架-模块-仅引导当前模块
EN

Stack Overflow用户
提问于 2012-03-01 00:20:08
回答 3查看 7K关注 0票数 2

我正在使用模块构建一个多站点Zend Framework应用程序,类似于以下结构:

代码语言:javascript
复制
|Project
    |-Application
        |-configs
        |-modules
            |-core
                |-controllers
                |-models
                |-views
                |-Bootstrap.php
            |-site1
                |-controllers
                |-models
                |-views
                |-Bootstrap.php
            |-site2
            |-site3
        |-Bootstrap.php
    |-Docs
    |-Library
    |-Public
    |-.zfproject.xml

每个模块都扩展了Core模块。

我的模块中有以下内容:

代码语言:javascript
复制
resources.frontController.moduleDirectory = APPLICATION_PATH "/modules"
resources.modules[] = ""

引导/application/modules/core/bootstrap.php/application/modules/xxx/bootstrap.php的最佳方式是什么,其中'xxx‘是要加载的模块的名称?

我可以在每个Bootstrap方法的顶部进行检查吗?

或者,我是否应该只为我正在请求的站点添加核心模块,因此只有两个Bootstrap.php文件会被加载?

编辑

如果我从我的application.ini中删除resources.modules[] = "",并在我的主Bootstrap.php中使用以下代码来添加一个模块,它似乎会添加控制器,但实际上并没有触发位于模块中的Bootstrap.php?

代码语言:javascript
复制
$frontController = $this->getResource('frontController');
$frontController->addControllerDirectory(APPLICATION_PATH . '/modules/site1/controllers', 'site1');
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-03-02 20:26:37

看看Matthew Weier‘’Phinney的帖子:

Module Bootstraps in Zend Framework: Do's and Don'ts

特别要注意的是,他推荐在路由完成后触发的前端控制器插件,检查正确的模块,否则提早退出。

票数 3
EN

Stack Overflow用户

发布于 2012-03-01 00:28:15

bootstrap的目的是初始化应用程序。因此,所有模块引导将始终在每次请求时初始化,主应用程序也是如此。如果要根据加载的模块执行操作,最简单的方法是在控制器插件中执行。在插件中,你可以查看当前的模块,然后运行你需要的。

或者,您可以在应用程序引导程序中手动添加单个模块,而不是在配置中添加resources.modules[] = ""行(这将自动扫描添加所有模块的模块目录)。这将允许您仅添加与正在查看的任何站点相关的核心站点和路径。不过,我不确定这是否适合模块的设计。

您还需要手动启动模块引导程序:

代码语言:javascript
复制
require_once APPLICATION_PATH.'/modules/site1/Bootstrap.php';
$className = 'Site1_Bootstrap';
$moduleBootstrap = new $className($this);
$moduleBootstrap->bootstrap();
票数 1
EN

Stack Overflow用户

发布于 2013-12-23 20:44:57

代码语言:javascript
复制
protected function _initAutoload(){

    $front = Zend_Controller_Front::getInstance();
    $front->setControllerDirectory(array( 'Default' => APPLICATION_PATH.'/modules/default/controllers', 'Other' => APPLICATION_PATH.'/modules/other/controllers' ));
    $front->setParam('useDefaultControllerAlways', true);
    $modules = $front->getControllerDirectory();
    $default = $front->getDefaultModule();

    $router = new Zend_Controller_Router_Rewrite();
    $request =  new Zend_Controller_Request_Http();
    $router->route($request);
    $current_module = ucfirst($request->getModuleName());

    foreach (array_keys($modules) as $module) {

        if ($module == $current_module) {
            $modelLoader = new Zend_Application_Module_Autoloader(array( 'namespace' => $module, 'basePath'  => $front->getModuleDirectory($module)));

            require_once $front->getModuleDirectory($module).'/Bootstrap.php';
            $className = $module.'_Bootstrap';
            $moduleBootstrap = new $className($this);
            $moduleBootstrap->bootstrap();
        }
    }

    return $modelLoader;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9502762

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档