【问题标题】:How to use module structure for two sites sharing the same admin and model/DB?如何为共享相同管理员和模型/数据库的两个站点使用模块结构?
【发布时间】:2012-03-20 02:40:57
【问题描述】:

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

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

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

【问题讨论】:

  • 我认为您最大的问题可能是正确获取 url 和路由(我没有资格帮助路由,否则我会提供建议)。在模块之间使用类完全没有问题 我经常在模块之间使用表单和模型。我通常在默认的 model/dbtable 目录中设置我的 dbTable 模型,并在任何地方共享它们。只需调用正确的类名,一切都会按预期工作。与往常一样,您仍然可以将库用于可能不适合其他地方并需要共享的代码。

标签: zend-framework frameworks module models


【解决方案1】:

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

2) 站点2

3) 管理员

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

File Index.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中获取模块名

那么你需要有文件夹:

/module/site1

/module/site2

/模块/管理员

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

来自 ADMIN 的控制器示例

<?php
class Admin_IndexController extends Zend_Controller_Action
{

    private $params;

    function init()
    {

    }

    public function indexAction()
    {

    }
}

站点 1 或站点 2 的控制器示例

<?php
class IndexController extends Zend_Controller_Action
{

    private $params;

    function init()
    {

    }

    public function indexAction()
    {

    }

}

我希望这行得通,不要检查,但基本上是做什么的想法。有什么问题告诉我

【讨论】:

  • 感谢您的回答,这确实是我要问的问题,我们确实应用了您的解决方案,并且运行良好
猜你喜欢
  • 2017-09-06
  • 1970-01-01
  • 2015-07-05
  • 1970-01-01
  • 1970-01-01
  • 2011-07-22
  • 2016-09-21
  • 1970-01-01
  • 2014-09-09
相关资源
最近更新 更多