Я думаю, что у любой команды или самостоятельного разработчика на определенном этапе работы формируется некая базовая архитектура приложения, с которой ему или им удобно работать и которую можно перекидывать из проекта в проект. Мне в свое время на глаза попалось архитектурное решение команды 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
Автор: durovchpoknet