Как использовать структуру модуля для двух сайтов, использующих одного администратора и модель / БД? - PullRequest
0 голосов
/ 20 марта 2012

Я работаю над реализацией Zend Framework в рамках существующего проекта, который имеет 2 внешних сайта (у компании есть два сайта для двух телевизионных каналов), которые администрируются одним и тем же внутренним сайтом.В настоящее время они плохо организованы с двумя экземплярами Zend Framework, которые дублируют код области бэкэнда / администрирования и дублируют базы данных, так как сайт и бэкэнд совместно используют базу данных.

При реализации Zend Framework я хотел бы создать возможность разделить эту структуру следующим образом: 1 модуль front-site1, 1 модуль для front-end сайта 2 и 1 модуль для backend / admin сайта.Мне нужно, чтобы каждый модуль мог указывать на одни и те же модели, поскольку все три модуля работают в одной базе данных и в одних и тех же бизнес-объектах.

Однако я не смог найти никакой информации о том, каксделать это в документации.Может ли кто-нибудь помочь со ссылкой на то, как это сделать, или с некоторыми простыми инструкциями, как это сделать?или придумать лучшую структуру, если я ошибаюсь?Какую конфигурацию я должен настроить в ZF, чтобы убедиться, что www.site1.com -> module1 (front-end1) и www.site2.com -> module2 (front-end2), а также admin.site1 и admin.site2.com указывает на module3 (admin / backend)

1 Ответ

0 голосов
/ 20 марта 2012

Поправьте меня, если я ошибаюсь, вам нужно иметь все "ядро" и "библиотека" для всех моделей и 3 разных "модуля" 1) site1

2) site2

3) admin

Если это правильно, вы можете сделать следующее:

Индекс файла.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

/ module / admin

Администратор сайта может получить доступ с обоих сайтов, с URL-адреса 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()
    {

    }

}

Надеюсь, это работает, не проверяйте,но в основном это идея о том, что делать.Любой вопрос, дайте мне знать

...