Новое приложение Yii в один clone. YiiBoilerplate

Новое приложение Yii в один clone. YiiBoilerplateЯ думаю, что у любой команды или самостоятельного разработчика на определенном этапе работы формируется некая базовая архитектура приложения, с которой ему или им удобно работать и которую можно перекидывать из проекта в проект. Мне в свое время на глаза попалось архитектурное решение команды CleverTechпод названием YiiBoilerplate. Поскольку я не нашел публикаций на хабре по этой теме, предлагаю небольшой пост.
Вкратце особенности данного шаблона:

  • админка и Frontend реализованы в качестве полноценных приложений
  • общие настройки, модели и компоненты для Backend и Frontend можно хранить в одном месте
  • есть возможность переключения между настройками для Dev и Prod одной строчкой в командной строке

Под катом основная соль данного решения. Текста немного. Предлагаю обсудить иные решения и поделиться собственным опытом по теме архитектуры приложений Yii в комментариях.

Про разделение Backend и Frontend

Архитектура YiiBoilerplate предполагает, что Backend и Frontend проекта реализуются в качестве отдельных приложений со своими настройками. Приложения расположены соответственно в папках Backend и Frontend.

/
   backend/
   frontend/

 

Их структура абсолютно идентична традиционной в Yii-приложении.

/frontend
    components/
    config/            
    controllers/
    extensions/
    lib/
    models/ 
    modules/    
    runtime/ 
    views/
    www/
       index.php

 
При этом общие компоненты, настройки и модели можно вынести в отдельную директорию Common. Там же находится и сам фреймворк.

/
   backend/

   frontend/

   common/
      components/
      config/        
      data/
      extensions/        
      lib/        
         Yii/
      messages/
      models/
      widgets/

 
То есть, если, допустим, мы используем одну и ту же модель User как в админке, так и на фронте. То можно эту модель поместить в common/models/User.php и она будет доступна и там, и там. Аналогично, к примеру, для настроек базы данных.

Про конфигурации для Dev и Prod

Тут основная фишка заключается в том, что в директориях conf, есть подразделenvironments и файл конфигурации с постфиксом -env.

config/
        environments/
            main-dev.php 
            main-prod.php
        main-env.php 
        main.php

 
Здесь надо отметить, что авторы YiiBoileplate позаботились и добавили в рут репозитория скрипт runpostdeploy, обращаясь к которому из командой строки runpostdeploy EnvType можно сразу переключать настройки приложения с Dev на Prod. EnvType в конкретном случае dev или prod. Это полезно, когда возникает необходимость переносить проект с хоста разработки на боевой.

И напоследок полная структура шаблона, где звездочками отмечены папки, добавленные в gitignore:

/
    backend/
    components/
    config/
        environments/
        main-private.php *
        main-prod.php
                    params-private.php *
        params-prod.php
            main-env.php *
            main-local.php *
            main.php
            params-env.php *
            params-local.php *
            params.php
            test.php
    controllers/
    SiteController.php
    extensions/
        behaviors/
        validators/
    lib/
    models/
        FormModel.php
    modules/
    runtime/ *
    views/
    layouts/
    site/
    widgets/
    www/
        assets/ *
        css/
        images/
        js/
        themes/
        index.php
        .htaccess
common/
    components/
    config/
        environments/
            params-private.php *
            params-prod.php
        params-env.php *
        params-local.php *
        params.php
    data/
    extensions/
    behaviors/
    validators/
    lib/
        Behat/
        Pear/
        Yii/
        Zend/
    messages/
    models/
    widgets/
    console/
    commands/
    components/
    config/
    environments/
    lib/
    migrations/
    models/
    runtime/ *
    yiic.php
frontend/
    components/
    config/
        environments/
            main-private.php *
            main-prod.php
            params-private.php *
        params-prod.php
        main-env.php *
        main-local.php
        main.php
        params-env.php *
        params-local.php *
        params.php
        test.php
    controllers/
    extensions/
    behaviors/
    validators/
    lib/
    models/
    modules/
    runtime/ *
    views/
    layouts/
    site/
    www/
    assets/ *
    css/
    files/
    images/
    js/
    less/
    index.php
    robots.txt
    .htaccess
    tests/
        bootstrap/
        FeatureContext.php
        YiiContext.php
    features/
        Startup.feature
    behat.yml
INSTALL.md
README.md
runbehat
runpostdeploy
yiic
yiic.bat