Перевод (Актуальная английская версия от 2014/11/05). Изображение переводить не нужно, но нужно его скопировать в images/advanced-app-configs.png
24 KiB
Шаблон сложного(Advanced) приложения
Обратите внимание: Данная глава находится в разработке.
Этот шаблон предназначен для крупных проектов разрабатываемых в командах где приложение администратора(backend) отделено от приложения пользователя(frontend), прилжения располагаются на нескольких разных серверах. Этот шаблон приложения имеет немного больше возможностей и содержит необходимую для этого БД, позволяет регистрироваться и восстанавливать пароль без дополнительных настроект.
Установка
###Установка при помощи Composer'a
Если у Вас нет Composer'a[Кампоузер], следуйте инструкциям в разделе Установка Yii для его установки.
Если Composer установлен, Вы можете установить приложение использую следующие команды:
composer global require "fxp/composer-asset-plugin:1.0.0-beta3"
composer create-project --prefer-dist yiisoft/yii2-app-advanced yii-application
Первая команда установит плагин composer asset plugin, который позволит управлять Composer'у зависимостями из других пакетных менеджеров (bower и npm). Нужно всего один раз выполнить эту команду и эти возможности будут доступны всегда.
Вторая команда установит сложное приложение в директорию yii-application. Вы можете выбрать другое имя директория если пожелаете.
Начало работы
После установки приложения, Вам нужно выполнить следующие действия, чтобы инициализировать установленное приложение. Вам нужно сделать это только один раз для всех последующих приложений.
-
Выполните команду
initи выберите окружениеdev.php /path/to/yii-application/initможно также вручную запустить пакетный файл (/path/to/yii-application/init.bat <для Windows> или /path/to/yii-application/init <для Linux> в командном окне указать
0и тем самым выбрать окружение 'dev' и подтвердить запись измененийyes.
Также можно выполнить эту команду "втихую" без интерактивного режима.
```
php /path/to/yii-application/init --env=Production overwrite=All
```
- Создайте новую базу данных и внесите соответствующие изменения в файл
common/config/main-local.phpв разделе конфигурацииcomponents.db.
- Примените миграции при помощи консольной команды
yii migrate(в консоле(ОС) выполняем/path/to/yii-application/yii migrateи на вопросApply the above migration? (yes|no) [no]:пишемyes)
- Настройте на вебсервере URL и корневые директории для двух сайтов:
- для приложения frontend директория
/path/to/yii-application/frontend/web/и используйте URL например такойhttp://yourdomain/frontend/ - для приложения backend директория
/path/to/yii-application/frontend/web/и используйте URL например такойhttp://yourdomain/backend/(примечание: я просто поместил директориюyii-applicationв веб директорию моего вебсервера и сайт стал доступен по URL http://127.0.0.1/yii-application/frontend/web/ )
Структура директорий
Корневая директория содерит следующие поддиректории:
backend- веб-приложение backend(административное).common- общие файлы для всех приложений.console- приложение для консоли.environments- настройки окружения.frontend- веб-приложение frontend(пользовательское).
Корневая директория содержит следующий список файлов.
.gitignoreсодержит список директорий игнорируемых системой контроля версий git. Если Вам необходимо, чтобы git не добавлял в репозиторий какие-то файлы или папки, то добавьте инструкцию в этот файл.composer.json- Конфигурация Composer'a - подробно описана ниже в главеНастройка Composer'a.init- скрипт инициализации (подробно в главеНастройка Composer'aниже) для Linux.init.bat- скрипт инициализации - такой же командный файл для Windows.LICENSE.md- информация о лицензии. Разместите лицензию вашего проекта в нем. Особенно когда код доступен всем ( opensourcing).README.md- основная информация об установки шаблона. Можете разместить в нем информацию о вашем проекте и его настройке.requirements.php- проверка соответствия требованиям Yii.yii- консольное приложение начальной загрузки (bootstrap) для Linux.yii.bat- такое же приложение для Windows.
Предустановленные псевдонимы путей
@yii- директория фрэймворка.@app- корневая директория исполняемого приложения.@common- директория common.@frontend- директория веб-приложения frontend.@backend- директория веб-приложения backend.@console- директория console.@runtime- директория runtime исполняемого приложения.@vendor- директория vendor, содержащая пакеты загруженые Composer'ом.@bower- директория vendor, содержащая пакеты bower packages.@npm- директория vendor, содержащая пакеты npm packages.@web- основной URL исполняемого веб-приложения.@webroot- корневая веб-директория исполняемого веб-приложения.
Псевдонимы характерные для структуры директорий сложного(advanced) приложения (@common, @frontend, @backend и @console) заданы в common/config/bootstrap.php.
Приложения
В сложном(advanced) шаблоне размещается три приложения: frontend, backend and console. Frontend это та часть приложения которое обеспечивает взаимодействие системы с конечным пользователем проекта. Backend это административная панель, аналитика и прочий подобный функционал. Console обычно используется для выполнения заданий по рассписанию(cron) и низкоуровневого управления сервером.
Также есть директория common, которая содержит файлы используемые более чем одним приложением. Например, модель User. Веб-приложения Frontend и backend оба содержать директория web. Это корневая папка сайтов которую вы должны настроить в вебсервере.
У каждого приложения есть собственное пространство имен (namespace) и псевдоним соответствующий его названию. Это же справедливо и для общей директории common.
Конфигурация и окружение
Существует множество проблем при обычном подходе к настройке конфигурации:
Каждый участник команды разработки имеет свою собственную конфигурацию. Изменение конфигурации в общем репозитории повлияет на настройки других участников команды. Пароль от эксплуатационной БД и API ключи не должны оказаться в хранилище. Существует много серверных режимов(environments): development(разработка), testing(тестирование), production(эксплуатация). Каждый режим должен иметь свою собственную конфигурацию. Настройка всех параметров конфигурации для каждого случая использования очень однотипна и отнимает много времени для ее поддержки.
Для решения этих проблем Yii вводит простую концепцию окружений. Каждое окружение(режим) представлено набором файлов в директории environments. Команда init используется для переключения между ними(режимами). Она просто копирует все файлы из директории environments в корневую директорию, где находятся все приложения.
Обычно окружение содержит файлы первоначальной загрузки приложения такие как index.php и файлы конфигурации, имена которых дополнены с суфиксами -local.php. Они добавлены в файл .gitignore и никогда не попадут в хранилище кода.
Чтобы избежать дублирования конфигураций они перекрывают друг друга. Например, приложение frontend считывает конфигурацию из файлов в следующем порядке:
common/config/main.phpcommon/config/main-local.phpfrontend/config/main.phpfrontend/config/main-local.php
Парамтры считываются в следующем порядке:
common/config/params.phpcommon/config/params-local.phpfrontend/config/params.phpfrontend/config/params-local.php
Значения из последующего конфигурационного файла перекрывают аналогичные значения из предыдущих конфигурационных файлов.
Полная схема:
Настройка Composer'a
После того как шаблон приложения установлен, будет хорошей идеей настроить дефолтный composer.json который находится в корневой директории проекта:
{
"name": "yiisoft/yii2-app-advanced",
"description": "Yii 2 Advanced Application Template",
"keywords": ["yii", "framework", "advanced", "application template"],
"homepage": "http://www.yiiframework.com/",
"type": "project",
"license": "BSD-3-Clause",
"support": {
"issues": "https://github.com/yiisoft/yii2/issues?state=open",
"forum": "http://www.yiiframework.com/forum/",
"wiki": "http://www.yiiframework.com/wiki/",
"irc": "irc://irc.freenode.net/yii",
"source": "https://github.com/yiisoft/yii2"
},
"minimum-stability": "dev",
"require": {
"php": ">=5.4.0",
"yiisoft/yii2": "*",
"yiisoft/yii2-swiftmailer": "*",
"yiisoft/yii2-bootstrap": "*",
"yiisoft/yii2-debug": "*",
"yiisoft/yii2-gii": "*"
},
"scripts": {
"post-create-project-cmd": [
"yii\\composer\\Installer::setPermission"
]
},
"extra": {
"writable": [
"backend/runtime",
"backend/web/assets",
"console/runtime",
"console/migrations",
"frontend/runtime",
"frontend/web/assets"
]
}
}
Во-первых мы обновляем основную информацию. Меняем значения параметро name, description, keywords, homepage и support на соответствующие вашему проекту.
А сейчас интересная часть. Вы можете добавить больше пакетов необходимых для вашего приложения в раздел require.
Все эти пакеты загрузятся с packagist.org, так что не стесняйтесь полазить по этому сайту в поисках полезного кода.
После того как ваш composer.json настроен, Вы можете выполнить в консоле команду composer update --prefer-dist, подождать пока требуемые пакеты загрузятся и установятся, и просто начать их использовать. Автозагрузка классов из этих пакетов будет осуществляться автоматически.
Создание ссылок из backend'а в frontend
Часто приходиться создавать ссылки из приложения backend в приложение frontend. Так как frontend приложение может содержать свои собственные правила для URL менеджера, то вам придется продублировать их в конфигурации backend приложения в отдельной секции с отличающимся от основного блока правил(urlManager) названием (например: 'urlManagerFrontend'):
return [
'components' => [
'urlManager' => [
// это ваши обычные правила URL менеджера в конфигурации backend приложения
],
'urlManagerFrontend' => [
// а это ваши правила URL менеджера взятые из конфигурации frontend приложения
],
],
];
После того, как это будет сделано, вы сможете получить URL, указывающий на Frontend приложение следующим способом:
echo Yii::$app->urlManagerFrontend->createUrl(...);
