如何使用共享相同管理员和模型/ DB的两个站点的模块结构?

时间:2012-03-20 02:40:57

标签: zend-framework frameworks module models

我正在一个现有项目中实施Zend Framework,该项目有两个前端站点(该公司有两个站点用于两个电视通道),由同一个后端站点管理。目前这些组织很差,有两个zend框架实例,它们复制后端/管理区域的代码并复制数据库,因为站点和后端共享数据库。

在实现Zend Framework时,我想创建能够以这种方式拆分此结构:1个模块front-site1,1个模块用于前端站点2,1个模块用于后端/ admin站点。我需要能够将每个模块指向相同的模型,因为所有三个模块都在同一个数据库和同一个业务对象上工作。

但是,我无法在文档中找到有关如何执行此操作的任何信息。任何人都可以帮助解决如何执行此操作的链接或如何完成它的一些简单说明?如果我弄错了,还是想要一个更好的结构?我应该在ZF中设置什么样的配置以确保www.site1.com - > module1(front-end1)和www.site2.com - > module2(前端2),admin.site1和admin.site2.com都指向module3(admin / backend)

1 个答案:

答案 0 :(得分:0)

纠正我,如果我错了,你需要拥有所有模型的所有“核心”和“库”,以及3个不同的“模块” 1)site1

2)site2

3)管理员

如果这是正确的,您可以执行以下操作。

文件索引.PHP 添加类似的内容。

// Define application environment
$environments = array(
    'localhost' => 'local'
    'www.site1.com' => 'site1',
    'www.site2.com' => 'site2',
);

$host = isset($_SERVER['SERVER_NAME']) ? $_SERVER['SERVER_NAME'] : null;

if (isset($environments[$host])) {
    defined('APPLICATION_ENV')
        || define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : $environments[$host]));
}else{
    defined('APPLICATION_ENV','local');
}

添加您需要的所有环境和所有网站

文件config / application.ini 需要包含所有其他信息。

; -----------------------------------------------------------------------
[production]
; -----------------------------------------------------------------------
resources.frontController.moduleDirectory[] = PUBLIC_PATH "/modules"
resources.frontController.plugins.moduleselector = "Your_Application_Plugin_ModuleSelector"
; -----------------------------------------------------------------------
[site1 : production]
; -----------------------------------------------------------------------
settings.module.name = "site1"
; -----------------------------------------------------------------------
[site2 : production]
; -----------------------------------------------------------------------
settings.module.name = "site2"

并创建插件文件。

class Your_Application_Plugin_ModuleSelector extends Zend_Controller_Plugin_Abstract {
    public function preDispatch(Zend_Controller_Request_Abstract $request) {
        ...
        $request->setModuleName($getVarFromApp);
    }
...
}

您需要从application.ini

获取模块名称

然后你需要有文件夹:

/模块/ SITE1

/模块/站点2

/模块/管理

管理站点可以从两个站点访问,网址为www.site1.com/admin

ADMIN

的控制器示例
<?php
class Admin_IndexController extends Zend_Controller_Action
{

    private $params;

    function init()
    {

    }

    public function indexAction()
    {

    }
}

来自site1或site2的控制器示例

<?php
class IndexController extends Zend_Controller_Action
{

    private $params;

    function init()
    {

    }

    public function indexAction()
    {

    }

}

我希望这有效,不要检查,但基本上是做什么的想法。有任何问题让我知道