Структура папок Yii и глобальная конфигурация для n приложений

Я создаю структуру папок и глобальную конфигурацию, чтобы позволить мне создавать приложения на платформе Yii, где все приложения могут использовать общие коды, расширения или модули.

Идея состоит в том, чтобы каждое приложение имело бизнес-уровень для этого приложения, но все, что может использоваться между приложениями, мы хотим использовать как общий репозиторий (модели, расширения, виджеты и т. д.).

Например, мы хотим поделиться расширением Auth для управления системным разрешением, но я хочу «установить» Auth в общей папке, а не в каждом приложении.

Ниже приведена архитектура, которую я хотел бы построить:

Архитектура приложений

Я нашел YiiBoilerplate как что-то похожее, но они не настраивают Yii таким образом, чтобы мы хотели .

Желаемая структура папок:

common/
    css/
    images/
    protected/
        commands/ 
        components/ 
        config/ 
        controllers/ 
        extensions/ 
        models/ 
        views/ 
Application1/
    css/
    images/
    protected/
        commands/ 
        components/ 
        config/ 
        controllers/ 
        extensions/ 
        models/ 
        views/ 

Итак, остановимся на некоторых моментах:

  1. Если мой пользователь находится в приложении X (www.applicationx.com), а страница входа является «общей» структурой, я хочу отобразить пользователю что-то вроде этого: www.applicationx.com/index.php?r=user/login .

  2. Я хочу иметь возможность легко перемещаться между папкой приложения и общей папкой.

  3. Я не хочу использовать тему, потому что у меня разные приложения с различными визуальными требованиями и поведением.

Есть мысли по этому поводу? Есть хорошие советы? Заранее спасибо!


person Eduardo M    schedule 21.05.2013    source источник
comment
Все, что вам нужно, уже есть в Boilerplate, кроме Common auth Auth для всех приложений. Аутентификация пользователя Yii основана на приложении или модуле, я думаю, что ее нельзя применять ко всем приложениям, помещая ее в общий доступ.   -  person hemc4    schedule 21.05.2013
comment
Вы можете добавить собственный автозагрузчик и зарегистрировать его для загрузки до того, как yii встроит автозагрузчик. Загрузите любой из ваших общих компонентов и, если он не найден, пусть автозагрузчик yii обрабатывает его в каждом приложении.   -  person    schedule 21.05.2013


Ответы (1)


Ну, я нашел способ, как это сделать.

Прежде всего, структура моих папок выглядит примерно так:

common/
    css/
    images/
    js/
    extensions/
        bootstrap/
        auth/
    protected/
        /* Yii Default directory folder*/
Application1/
    css/
    images/
    js/
    protected/
        /* Yii Default directory folder*/

Файл конфигурации в общей папке

return array(
    'import'=>array(
        'common.components.*',
        'common.models.*',
    ),
    'modules' => array(
        'auth',
    ),
    'components' => array(
        'authManager' => array(
            'behaviors' => array(
                'auth' => array(
                    'class' => 'common.modules.auth.components.AuthBehavior',
                    'admins'=>array('admin', 'foo', 'bar'), 
                ),
            ),
        ),
        'user' => array(
            'class' => 'common.modules.auth.components.AuthWebUser',
        ),
        'bootstrap'=>array(
            'class'=>'common2.extensions.bootstrap.components.Bootstrap',
        ),
    ),
);

Авторизоваться

Логин находится под «общим», поэтому, чтобы перенаправить на страницу входа, я просто вызываю SiteController.php и внедряю там процесс входа, предоставляя пользователю возможность выбрать приложение, в которое он хочет войти.

После авторизации перенаправляю пользователя на адрес приложения:

$this->redirect(Yii::app()->request->getBaseUrl(true) . "/../" .$App. "/" . "");

Файл конфигурации в папке приложения

под приложением файл index.php имеет alias для общего каталога, так что они все еще могут «разговаривать».

Yii::setPathOfAlias('common', dirname(__FILE__) . $directory);

Если вы хотите сделать что-то подобное и вам трудно понять, дайте мне знать, я добавлю сюда дополнительную информацию, если вам нужно.

person Eduardo M    schedule 06.06.2013