Шаблон сложного(Advanced) приложения ============================= > Обратите внимание: Данная глава находится в разработке. Этот шаблон предназначен для крупных проектов разрабатываемых в командах где приложение администратора(backend) отделено от приложения пользователя(frontend), прилжения располагаются на нескольких разных серверах. Этот шаблон приложения имеет немного больше возможностей и содержит необходимую для этого БД, позволяет регистрироваться и восстанавливать пароль без дополнительных настроект. Установка ------------ ###Установка при помощи Composer'a Если у Вас нет [Composer'a[Кампоузер]](http://getcomposer.org/), следуйте инструкциям в разделе [Установка Yii](start-installation.md#installing-via-composer) для его установки. Если 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](https://github.com/francoispluchino/composer-asset-plugin/), который позволит управлять Composer'у зависимостями из других пакетных менеджеров (bower и npm). Нужно всего один раз выполнить эту команду и эти возможности будут доступны всегда. Вторая команда установит `сложное приложение` в директорию `yii-application`. Вы можете выбрать другое имя директория если пожелаете. Начало работы --------------- После установки приложения, Вам нужно выполнить следующие действия, чтобы инициализировать установленное приложение. Вам нужно сделать это только один раз для всех последующих приложений. 1. Выполните команду `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 ``` 2. Создайте новую базу данных и внесите соответствующие изменения в файл `common/config/main-local.php` в разделе конфигурации `components.db`. 3. Примените миграции при помощи консольной команды `yii migrate` (в консоле(ОС) выполняем `/path/to/yii-application/yii migrate` и на вопрос `Apply the above migration? (yes|no) [no]:` пишем `yes`) 4. Настройте на вебсервере 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](http://bower.io/). - `@npm` - директория vendor, содержащая пакеты [npm packages](https://www.npmjs.org/). - `@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.php` - `common/config/main-local.php` - `frontend/config/main.php` - `frontend/config/main-local.php` Парамтры считываются в следующем порядке: - `common/config/params.php` - `common/config/params-local.php` - `frontend/config/params.php` - `frontend/config/params-local.php` Значения из последующего конфигурационного файла перекрывают аналогичные значения из предыдущих конфигурационных файлов. Полная схема: ![Конфигурации сложного(advanced) приложения](images/advanced-app-configs.png) Настройка Composer'a -------------------- После того как шаблон приложения установлен, будет хорошей идеей настроить дефолтный `composer.json` который находится в корневой директории проекта: ```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](https://packagist.org/), так что не стесняйтесь полазить по этому сайту в поисках полезного кода. После того как ваш `composer.json` настроен, Вы можете выполнить в консоле команду `composer update --prefer-dist`, подождать пока требуемые пакеты загрузятся и установятся, и просто начать их использовать. Автозагрузка классов из этих пакетов будет осуществляться автоматически. Создание ссылок из backend'а в frontend --------------------------------------- Часто приходиться создавать ссылки из приложения backend в приложение frontend. Так как frontend приложение может содержать свои собственные правила для URL менеджера, то вам придется продублировать их в конфигурации backend приложения в отдельной секции с отличающимся от основного блока правил(urlManager) названием (например: 'urlManagerFrontend'): ```php return [ 'components' => [ 'urlManager' => [ // это ваши обычные правила URL менеджера в конфигурации backend приложения ], 'urlManagerFrontend' => [ // а это ваши правила URL менеджера взятые из конфигурации frontend приложения ], ], ]; ``` После того, как это будет сделано, вы сможете получить URL, указывающий на Frontend приложение следующим способом: ```php echo Yii::$app->urlManagerFrontend->createUrl(...); ```