Yii-structure4big

29.01.2013

Вы наверное слышали о структуре папок для больших и средних проектов от CleverTech – yii-boilerplate? У меня не было времени, чтобы подробнее в ней разобраться и вот недавно, продумывая структуру одного проекта, решил использовать на нем boilerplate.

Прочитал документацию, обилие конфигов меня вначале смутило, но всё оказалось не так сложно. Нужно понять 2 вопроса:

  1. Как мерджатся конфиги?
  2. Что дает нам environment и скрипт runpostdeploy?

Кроме этого сделал свою сборку Yii-structure4big на этой отличной основе!

01. Конфигурирование yii-boilerplate

В проекте есть 4 папки конфигов в: backend, frontend, common и console. Вопрос — как использовать общий конфиг в приложениях?

Ответ простой — общий конфиг — это просто массив параметров, который дальше мерджится с параметрами приложения и уже в main.php-приложения мы может использовать эти смерджанные параметры.

Например общее подключение к БД:

return array(
    'env.code' => 'prod',
    'db.name' => 'test',
    'db.connectionString' => 'mysql:host=localhost;dbname=test',
    'db.username' => 'root',
    'db.password' => '',
);

Далее этот файл будет мерджится с /common/config/params.php и сам params.php с /backend/config/params.php:

return CMap::mergeArray(
    $paramsCommonArray,
    // merge frontend specific with resulting env-local merge *override by local
    CMap::mergeArray(
        array(
            // add here all frontend-specific parameters
        ),
        // merge environment parameters with local *override by local
        CMap::mergeArray($paramsEnvFileArray, $paramsLocalFileArray)
    )
);

Осталось только использовать $params['...'] внутри main.php-конфига:

'db' => array(
    'connectionString' => $params['db.connectionString'],
    'username' => $params['db.username'],
    'password' => $params['db.password'],
    'schemaCachingDuration' => YII_DEBUG ? 0 : 86400000, // 1000 days
    'enableParamLogging' => YII_DEBUG,
    'charset' => 'utf8'
),

02. Что такое environment и скрипт runpostdeploy?

Как вы заметили, внутри всех папок config есть папка environments, в которой находятся private и prod-файлы. Это файлы окружений: private – в него можно класть локальные настройки проекта (например, подключение к локальной БД и т.п.), а в prod – настройки для продакшен сервера. Private-файлы не коммитятся в систему управления версиями, т.к. для каждого программиста они свои.

Переходим к runpostdeploy-скрипту, ну во-первых он создает директории assets, runtime в приложениях, если созданы – удаляет и пересоздает по новой. Также можно выполнять миграции, ну и самое важное – он умеет переключать окружения (например, с private на production).

На самом деле при переключении окружения просто копируются файлы из /config/environments/окружение(private/prod) в /config/main-env.php и /config/params-env.php

03. Yii-structure4big

Это сборка yii-boilerplate, которую я сделал для себя. В ней есть уже настроенные и подключенные yii-user и rights, а кроме этого добавлены следующие расширения:

  • withRelatedBehavior
  • YiiSeoBehavior
  • translitUrlBehavior
  • Image Component
  • ElFinder Widget
  • Imperavi-Redactor
  • Uploadify
  • File-upload Action

Сборка ещё сыровата, есть идеи что бы улучшить, но для начала и этого будет достаточно.

blog comments powered by Disqus
Наверх