<!-----del--- Note: This section is under development.-->
> Примечание: Данная глава находится в разработке.
> Обратите внимание: Данная глава находится в разработке.
<!-----del---This template is for large projects developed in teams where the backend is divided from the frontend, application is deployed to multiple servers etc. This application template also goes a bit further regarding features and provides essential database, signup and password restore out of the box.-->
This application template also goes a bit further regarding features and provides essential database, signup and password restore out of the box.-->
Этот шаблон предназначен для крупных проектов разрабатываемых в командах где приложение администратора(backend) отделено от приложения пользователя(frontend), прилжения располагаются на нескольких разных серверах. Этот шаблон приложения имеет немного больше возможностей и содержит необходимую для этого БД, позволяет регистрироваться и восстанавливать пароль без дополнительных настроект.
Этот шаблон предназначен для крупных проектов разрабатываемых в командах где администраторская часть (backend) отделена
от приложения пользователя (frontend), прилжения располагаются на нескольких серверах и т.д. Этот шаблон приложения включает
значительное количество возможностей, таких как начальная схема базы данных, регистрация пользователя и воостановление его
пароля.
<!-----del---Installation-->
Установка
Установка
------------
---------
<!-----del---### Install via Composer-->
###Установка при помощи Composer'a
<!-----del---If you do not have [Composer[Кампоузер]](http://getcomposer.org/), follow the instructions in the [Installing Yii](start-installation.md#installing-via-composer) section to install it.-->
### Установка при помощи Composer
Если у Вас нет [Composer'a[Кампоузер]](http://getcomposer.org/), следуйте инструкциям в разделе [Установка Yii](start-installation.md#installing-via-composer) для его установки.
<!-----del---With Composer installed, you can then install the application using the following commands:-->
Если у вас ещё не установлен [Composer](http://getcomposer.org/), следуйте инструкциям в разделе
Если Composer установлен, Вы можете установить приложение использую следующие команды:
<!-----del---The first command installs the [composer asset plugin](https://github.com/francoispluchino/composer-asset-plugin/) which allows managing bower and npm package dependencies through Composer. You only need to run this command once for all. The second command installs the advanced application in a directory named `yii-application`. You can choose a different directory name if you want.-->
Первая команда установит плагин [composer asset plugin](https://github.com/francoispluchino/composer-asset-plugin/),
Первая команда установит плагин [composer asset plugin](https://github.com/francoispluchino/composer-asset-plugin/), который позволит управлять Composer'у зависимостями из других пакетных менеджеров (bower и npm). Нужно всего один раз выполнить эту команду и эти возможности будут доступны всегда.
который позволит работать с пакетами bower и npm через Composer. Эту команду необходимо выполнить едножды. Вторая команда
Вторая команда установит `сложное приложение` в директорию `yii-application`. Вы можете выбрать другое имя директория если пожелаете.
установит приожение advanced в директорию `yii-application`. Вы можете выбрать другое имя директория если пожелаете.
<!-----del---Getting started-->
Начало работы
Начало работы
---------------
-------------
<!-----del---After you install the application, you have to conduct the following steps to initialize the installed application. You only need to do these once for all.-->
После установки приложения, вам необходимо один раз выполнить приведённые ниже действия для того, чтобы инициализировать
После установки приложения, Вам нужно выполнить следующие действия, чтобы инициализировать установленное приложение. Вам нужно сделать это только один раз для всех последующих приложений.
установленное приложение.
<!-----del---1. Execute the `init` command and select `dev` as environment.-->
1. Выполните команду `init` и выберите окружение `dev`.
1. Выполните команду `init` и выберите окружение `dev`.
```
```
php /path/to/yii-application/init
php /path/to/yii-application/init
```
```
можно также вручную запустить пакетный файл (/path/to/yii-application/init.bat <для Windows> или /path/to/yii-application/init <для Linux>
Для производственных сервером удобно выполнять данную команду в неинтерактивном режиме.
в командном окне указать `0` и тем самым выбрать окружение 'dev' и подтвердить запись изменений `yes`.
<!-----del--- Otherwise, in production execute `init` in non-interactive mode.-->
Также можно выполнить эту команду "втихую" без интерактивного режима.
<!-----del---2. Create a new database and adjust the `components.db` configuration in `common/config/main-local.php` accordingly.-->
2. Создайте новую базу данных и внесите соответствующие изменения в секцию `components.db` файла `common/config/main-local.php`.
2. Создайте новую базу данных и внесите соответствующие изменения в файл `common/config/main-local.php` в разделе конфигурации `components.db`.
3. Примените миграции при помощи консольной команды `yii migrate`.
<!-----del---3. Apply migrations with console command `yii migrate`.-->
4. Настройте на вебсервере URL и корневые директории:
3. Примените миграции при помощи консольной команды `yii migrate` (в консоле(ОС) выполняем `/path/to/yii-application/yii migrate` и на вопрос `Apply the above migration? (yes|no) [no]:` пишем `yes`)
<!-----del---4. Set document roots of your web server:-->
4. Настройте на вебсервере URL и корневые директории для двух сайтов:
<!-----del---- for frontend `/path/to/yii-application/frontend/web/` and using the URL `http://frontend/`-->
- для приложения frontend директория `/path/to/yii-application/frontend/web/` и URL `http://yourdomain/frontend/`
<!-----del---- for backend `/path/to/yii-application/backend/web/` and using the URL `http://backend/`-->
- для приложения backend директория `/path/to/yii-application/frontend/web/` и URL `http://yourdomain/backend/`
- для приложения 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/ )
<!-----del---Directory structure-->
Структура директорий
Структура директорий
-------------------
-------------------
<!-----del---The root directory contains the following subdirectories:-->
Корневая директория содержит следующие поддиректории:
Корневая директория содерит следующие поддиректории:
<!-----del--- `backend` - backend web application.-->
-`backend` - веб приложение администраторской части.
<!-----del--- `common` - files common to all applications.-->
-`.gitignore` содержит список директорий игнорируемых системой контроля версий git. Если Вам необходимо, чтобы git не добавлял в репозиторий какие-то файлы или папки, то добавьте инструкцию в этот файл.
-`composer.json` - Конфигурация Composer'a - подробно описана ниже в главе `Настройка Composer'a`.
-`init` - скрипт инициализации (подробно в главе `Настройка Composer'a` ниже) для Linux.
-`init.bat` - скрипт инициализации - такой же командный файл для Windows.
-`LICENSE.md` - информация о лицензии. Разместите лицензию вашего проекта в нем. Особенно когда код доступен всем ( opensourcing).
-`README.md` - основная информация об установки шаблона. Можете разместить в нем информацию о вашем проекте и его настройке.
<!-----del---The aliases specific to the directory structure of the advanced application-->
Псевдонимы, характерные для структуры директорий приложения advanced (`@common`, `@frontend`, `@backend` и `@console`)
<!-----del---(`@common`, `@frontend`, `@backend`, and `@console`) are defined in `common/config/bootstrap.php`.-->
задаются в `common/config/bootstrap.php`.
Псевдонимы характерные для структуры директорий сложного(advanced) приложения (`@common`, `@frontend`, `@backend` и `@console`) заданы в `common/config/bootstrap.php`.
<!-----del---Applications-->
Приложения
Приложения
------------
----------
<!-----del---There are three applications in advanced template: frontend, backend and console. Frontend is typically what is presented-->
В шаблоне advanced три приложения: frontend, backend и console. Frontend это та часть приложения, которае обеспечивает
<!-----del---to end user, the project itself. Backend is admin panel, analytics and such functionality. Console is typically used for-->
взаимодействие системы с конечным пользователем проекта. Backend это административная панель, аналитика и прочая подобная
<!-----del---cron jobs and low-level server management. Also it's used during application deployment and handles migrations and assets.-->
функциональность. Console обычно используется для выполнения заданий по расписанию через cron, низкоуровневого
В сложном(advanced) шаблоне размещается три приложения: frontend, backend and console. Frontend это та часть приложения которое обеспечивает взаимодействие системы с конечным пользователем проекта. Backend это административная панель, аналитика и прочий подобный функционал. Console обычно используется для выполнения заданий по рассписанию(cron) и низкоуровневого управления сервером.
управления сервером, при развёртывании приложения, работы с миграциями и ресурсами.
<!-----del---There's also a `common` directory that contains files used by more than one application. For example, `User` model. frontend and backend are both web applications and both contain the `web` directory. That's the webroot you should point your web server to.-->
Также есть директория `common`, которая содержит файлы используемые более чем одним приложением. Например, модель `User`.
Также есть директория `common`, которая содержит файлы используемые более чем одним приложением. Например, модель `User`. Веб-приложения Frontend и backend оба содержать директория `web`. Это корневая папка сайтов которую вы должны настроить в вебсервере.
Оба веб приложения frontend и backend содержат директорию `web`. Это корневая директория, которую вы должны настроить
<!-----del---Each application has its own namespace and alias corresponding to its name. Same applies to common directory.-->
в вебсервере.
У каждого приложения есть собственное пространство имен (namespace) и псевдоним соответствующий его названию. Это же справедливо и для общей директории `common`.
<!-----del---Configuration and environments-->
У каждого приложения есть собственное пространство имён и соответствующий его названию псевдоним. Это же справедливо и для
Конфигурация и окружение
общей директории `common`.
------------------------------
<!-----del---There are multiple problems with a typical approach to configuration:-->
Конфигурации и окружения
Существует множество проблем при обычном подходе к настройке конфигурации:
------------------------
<!-----del---- Each team member has its own configuration options. Committing such config will affect other team members.-->
Существует множество проблем при типичном подходе к настройке конфигурации:
<!-----del---- Production database password and API keys should not end up in the repository.-->
<!-----del---- There are multiple server environments: development, testing, production. Each should have its own configuration.-->
<!-----del---- Defining all configuration options for each case is very repetitive and takes too much time to maintain.-->
Каждый участник команды разработки имеет свою собственную конфигурацию. Изменение конфигурации в общем репозитории повлияет на настройки других участников команды.
Пароль от эксплуатационной БД и API ключи не должны оказаться в хранилище.
Существует много серверных режимов(environments): development(разработка), testing(тестирование), production(эксплуатация). Каждый режим должен иметь свою собственную конфигурацию.
Настройка всех параметров конфигурации для каждого случая использования очень однотипна и отнимает много времени для ее поддержки.
- Каждый член команды имеет свою собственную конфигурацию. Изменение конфигурации в общем репозитории повлияет на всех
остальных.
- Пароль от эксплуатационной БД и API ключи не должны оказаться в репозитории.
- Существует много окружений: development (разработка), testing (тестирование), production (эксплуатация). Каждое окружение
должно иметь свою собственную конфигурацию.
- Настройка всех параметров конфигурации для каждого случая однотипна и отнимает слишком много времени.
<!-----del---In order to solve these issues Yii introduces a simple environments concept. Each environment is represented by a set of files under the `environments` directory. The `init` command is used to switch between these. What it really does is copy everything from the environment directory over to the root directory where all applications are.-->
Для решения этих проблем Yii вводит простую концепцию окружений. Каждое окружение(режим) представлено набором файлов в директории `environments`. Команда `init` используется для переключения между ними(режимами). Она просто копирует все файлы из директории `environments` в корневую директорию, где находятся все приложения.
<!-----del---Typically environment contains application bootstrap files such as `index.php` and config files suffixed with `-local.php`. These are added to `.gitignore` and never added to source code repository.-->
Для решения этих проблем Yii вводит простую концепцию окружений. Каждое окружение представлено набором файлов в
Обычно окружение содержит файлы первоначальной загрузки приложения такие как `index.php` и файлы конфигурации, имена которых дополнены с суфиксами `-local.php`. Они добавлены в файл `.gitignore` и никогда не попадут в хранилище кода.
директории `environments`. Для переключения между окружениями используется команда `init`. Она довольно проста. Всё,
что она на самом деле делает - это копирование всех файлов из директории окружения в корневую директорию, где находятся
все приложения.
<!-----del---In order to avoid duplication configurations are overriding each other. For example, the frontend reads configuration in the following order:-->
Обычно окружение содержит входные скрипты приложения, такие как `index.php`, и файлы конфигурации, имена которых
Чтобы избежать дублирования конфигураций они перекрывают друг друга. Например, приложение frontend считывает конфигурацию из файлов в следующем порядке:
дополнены суфиксами `-local.php`. Эти файлы добавлены в `.gitignore` и никогда не попадут в репозиторий.
Чтобы избежать дублирования, конфигурации перекрывают друг друга. Например, приложение frontend считывает конфигурацию
в следующем порядке:
-`common/config/main.php`
-`common/config/main.php`
-`common/config/main-local.php`
-`common/config/main-local.php`
-`frontend/config/main.php`
-`frontend/config/main.php`
-`frontend/config/main-local.php`
-`frontend/config/main-local.php`
<!-----del---Parameters are read in the following order:-->
Парамтры считываются в следующем порядке:
Парамтры считываются в следующем порядке:
-`common/config/params.php`
-`common/config/params.php`
...
@@ -194,20 +147,17 @@
...
@@ -194,20 +147,17 @@
-`frontend/config/params.php`
-`frontend/config/params.php`
-`frontend/config/params-local.php`
-`frontend/config/params-local.php`
<!-----del---The later config file overrides the former.-->
Значения из следующего конфигурационного файла перекрывают аналогичные значения из предыдущих конфигурационных файлов.
Значения из последующего конфигурационного файла перекрывают аналогичные значения из предыдущих конфигурационных файлов.
<!-----del---Here's the full scheme:-->
Полная схема:
Полная схема:
<!-----del---(!!!переводить изображение не требуется, нужно только скопировать его папку /images)-->
<!-----del---After the application template is installed it's a good idea to adjust default `composer.json` that can be found in the root directory:-->
После того как шаблон приложения установлен, хорошо бы изменить `composer.json` который находится в корневой директории
После того как шаблон приложения установлен, будет хорошей идеей настроить дефолтный `composer.json` который находится в корневой директории проекта:
проекта:
```json
```json
{
{
...
@@ -253,41 +203,38 @@
...
@@ -253,41 +203,38 @@
}
}
```
```
<!-----del---First we're updating basic information. Change `name`, `description`, `keywords`, `homepage` and `support` to match
Во-первых, мы обновляем основную информацию. Меняем значения `name`, `description`, `keywords`, `homepage` и `support`
your project.-->
на соответствующие вашему проекту.
Во-первых мы обновляем основную информацию. Меняем значения параметро `name`, `description`, `keywords`, `homepage` и `support` на соответствующие вашему проекту.
<!-----del---Now the interesting part. You can add more packages your application needs to the `require` section.-->
А сейчас интересная часть. вы можете добавить больше пакетов, необходимых для вашего приложения, в раздел `require`.
<!-----del---All these packages are coming from [packagist.org](https://packagist.org/) so feel free to browse the website for useful code.-->
Все они с [packagist.org](https://packagist.org/). Стоит его изучить так как там множество пакетов с полезным кодом.
А сейчас интересная часть. Вы можете добавить больше пакетов необходимых для вашего приложения в раздел `require`.
Все эти пакеты загрузятся с [packagist.org](https://packagist.org/), так что не стесняйтесь полазить по этому сайту в поисках полезного кода.
<!-----del---After your `composer.json` is changed you can run `composer update --prefer-dist`, wait till packages are downloaded and installed and then just use them. Autoloading of classes will be handled automatically.-->
После того как ваш `composer.json` настроен, вы можете выполнить в консоли команду `composer update --prefer-dist`,
После того как ваш `composer.json` настроен, Вы можете выполнить в консоле команду `composer update --prefer-dist`, подождать пока требуемые пакеты загрузятся и установятся, и просто начать их использовать. Автозагрузка классов из этих пакетов будет осуществляться автоматически.
подождать пока требуемые пакеты загрузятся и установятся, и начать их использовать. Автозагрузка классов этих пакетов
будет осуществляться автоматически.
<!-----del---Creating links from backend to frontend-->
Создание ссылок на frontend из backend
Создание ссылок из backend'а в frontend
--------------------------------------
---------------------------------------
<!-----del---Often it's required to create links from the backend application to the frontend application. Since the frontend application may contain its own URL manager rules you need to duplicate that for the backend application by naming it differently:-->
Часто приходится создавать ссылки из приложения backend на приложение frontend. Так как frontend может использовать
Часто приходиться создавать ссылки из приложения backend в приложение frontend. Так как frontend приложение может содержать свои собственные правила для URL менеджера, то вам придется продублировать их в конфигурации backend приложения в отдельной секции с отличающимся от основного блока правил(urlManager) названием (например: 'urlManagerFrontend'):
собственную конфигурация менеджера URL, вам придётся продублировать её в конфигурации backend под новым именем:
```php
```php
return[
return[
'components'=>[
'components'=>[
'urlManager'=>[
'urlManager'=>[
// это ваши обычные правила URL менеджера в конфигурации backend приложения
// конфигурация основного менеджера URL в конфигурации backend
],
],
'urlManagerFrontend'=>[
'urlManagerFrontend'=>[
// а это ваши правила URL менеджера взятые из конфигурации frontend приложения
// конфигурация менеджера URL из frontend
],
],
],
],
];
];
```
```
<!-----del---After it is done, you can get an URL pointing to frontend like the following:-->
После того, как это будет сделано, вы сможете получить URL, указывающий на frontend, следующим способом:
После того, как это будет сделано, вы сможете получить URL, указывающий на Frontend приложение следующим способом: