tutorial-advanced-app.md 14.4 KB
Newer Older
1 2
Шаблон приложения advanced
==========================
3

4
> Примечание: Данная глава находится в разработке.
5

6
Этот шаблон предназначен для крупных проектов разрабатываемых в командах где администраторская часть (backend) отделена
7 8
от приложения пользователя (frontend), приложения располагаются на нескольких серверах и т.д. Этот шаблон приложения включает
значительное количество возможностей, таких как начальная схема базы данных, регистрация пользователя и восстановление его
9
пароля. 
10 11

Установка
12
---------
13 14


15
### Установка при помощи Composer
16

17 18 19 20
Если у вас ещё не установлен [Composer](http://getcomposer.org/), следуйте инструкциям в разделе
[установка Yii](start-installation.md#installing-via-composer).

Если Composer установлен, вы можете установить приложение используя следующие команды:
21

Qiang Xue committed
22
    composer global require "fxp/composer-asset-plugin:1.0.0-beta4"
23 24
    composer create-project --prefer-dist yiisoft/yii2-app-advanced yii-application

25
Первая команда установит плагин [composer asset plugin](https://github.com/francoispluchino/composer-asset-plugin/),
26 27
который позволит работать с пакетами bower и npm через Composer. Эту команду необходимо выполнить единожды. Вторая команда
установит приложение advanced в директорию `yii-application`. Вы можете выбрать другое имя директория если пожелаете.
28 29 30


Начало работы
31
-------------
32

33 34
После установки приложения, вам необходимо один раз выполнить приведённые ниже действия для того, чтобы инициализировать
установленное приложение.
35 36 37 38 39 40

1. Выполните команду `init` и выберите окружение `dev`.

    ```
    php /path/to/yii-application/init
    ```
41

PendalF89 committed
42
    Для производственных серверов удобно выполнять данную команду в неинтерактивном режиме.
43 44 45 46 47

    ```
    php /path/to/yii-application/init --env=Production overwrite=All
    ```

48 49 50
2. Создайте новую базу данных и внесите соответствующие изменения в секцию `components.db` файла `common/config/main-local.php`. 
3. Примените миграции при помощи консольной команды  `yii migrate`.
4. Настройте на вебсервере URL и корневые директории:
51

52
- для приложения frontend директория `/path/to/yii-application/frontend/web/` и URL `http://yourdomain/frontend/`
53
- для приложения backend директория `/path/to/yii-application/backend/web/` и URL `http://yourdomain/backend/`
54 55 56 57

Структура директорий
-------------------

58
Корневая директория содержит следующие поддиректории:
59

60
- `backend` - веб приложение администраторской части.
61 62
- `common` - общие файлы для всех приложений.
- `console` - приложение для консоли.
63 64 65 66 67 68 69 70 71 72 73 74
- `environments` - настройки для различных окружений.
- `frontend` - веб приложение пользователя.

Корневая директория содержит следующие файлы:

- `.gitignore` содержит список директорий игнорируемых системой контроля версий git. Если вам необходимо предотвратить
  их попадание в репозиторий, перечислите их в данном файле.
- `composer.json` - Конфигурация Composer, подробно описанная в разделе «Настройка Composer» ниже.
- `init` - скрипт инициализации. Подробно описан ниже в разделе «Конфигурации и окружения».
- `init.bat` - он же для Windows.
- `LICENSE.md` - информация о лицензии. Разместите в нём лицензию вашего проекта. Особенно в случае OpenSource.
- `README.md` - основная информация об установки шаблона. Можете разместить в нём информацию о вашем проекте и его установке.
75
- `requirements.php` - проверка соответствия требованиям Yii.
76 77 78 79 80 81
- `yii` - входной скрипт консольного приложения.
- `yii.bat` - он же для Windows.

Встроенные псевдонимы путей
---------------------------

82
- `@yii` - директория фрэймворка.
83
- `@app` - корневая директория выполняемого в данный момент приложения.
84 85 86 87 88 89
- `@common` - директория common.
- `@frontend` - директория веб-приложения frontend.
- `@backend` - директория веб-приложения backend.
- `@console` - директория console.
- `@runtime` - директория runtime исполняемого приложения.
- `@vendor` - директория vendor, содержащая пакеты загруженые Composer'ом.
90 91 92
- `@bower` - директория vendor, содержащая [пакеты bower](http://bower.io/).
- `@npm` - директория vendor, содержащая [пакеты npm](https://www.npmjs.org/).
- `@web` - базовый URL исполняемого веб-приложения.
93 94
- `@webroot` - корневая веб-директория исполняемого веб-приложения.

95 96
Псевдонимы, характерные для структуры директорий приложения advanced  (`@common`,  `@frontend`, `@backend` и `@console`)
задаются в `common/config/bootstrap.php`.
97 98

Приложения
99
----------
100

101 102 103 104
В шаблоне advanced три приложения: frontend, backend и console. Frontend это та часть приложения, которае обеспечивает
взаимодействие системы с конечным пользователем проекта. Backend это административная панель, аналитика и прочая подобная
функциональность. Console обычно используется для выполнения заданий по расписанию через cron, низкоуровневого
управления сервером, при развёртывании приложения, работы с миграциями и ресурсами.
105

106 107 108
Также есть директория `common`, которая содержит файлы используемые более чем одним приложением. Например, модель `User`.
Оба веб приложения frontend и backend содержат директорию `web`. Это корневая директория, которую вы должны настроить
в вебсервере. 
109

110 111
У каждого приложения есть собственное пространство имён и соответствующий его названию псевдоним. Это же справедливо и для
общей директории `common`. 
112

113 114
Конфигурации и окружения
------------------------
115

116
Существует множество проблем при типичном подходе к настройке конфигурации:
117

118 119 120 121 122 123
- Каждый член команды имеет свою собственную конфигурацию. Изменение конфигурации в общем репозитории повлияет на всех
остальных.
- Пароль от эксплуатационной БД и API ключи не должны оказаться в репозитории.
- Существует много окружений: development (разработка), testing (тестирование), production (эксплуатация). Каждое окружение
  должно иметь свою собственную конфигурацию.
- Настройка всех параметров конфигурации для каждого случая однотипна и отнимает слишком много времени.
124 125


126 127 128 129
Для решения этих проблем Yii вводит простую концепцию окружений. Каждое окружение представлено набором файлов в
директории `environments`. Для переключения между окружениями используется команда `init`. Она довольно проста. Всё,
что она на самом деле делает - это копирование всех файлов из директории окружения в корневую директорию, где находятся
все приложения.
130

131 132 133 134 135
Обычно окружение содержит входные скрипты приложения, такие как `index.php`, и файлы конфигурации, имена которых
дополнены суфиксами `-local.php`. Эти файлы добавлены в `.gitignore` и никогда не попадут в репозиторий.

Чтобы избежать дублирования, конфигурации перекрывают друг друга. Например, приложение frontend считывает конфигурацию
в следующем порядке:
136 137 138 139 140 141

- `common/config/main.php`
- `common/config/main-local.php`
- `frontend/config/main.php`
- `frontend/config/main-local.php`

shude committed
142
Параметры считываются в следующем порядке:
143 144 145 146 147 148

- `common/config/params.php`
- `common/config/params-local.php`
- `frontend/config/params.php`
- `frontend/config/params-local.php`

149
Значения из следующего конфигурационного файла перекрывают аналогичные значения из предыдущих конфигурационных файлов.
150 151 152

Полная схема:

153 154 155 156
![Конфигурации приложения advanced](images/advanced-app-configs.png)

Настройка Composer
------------------
157

158 159
После того как шаблон приложения установлен, хорошо бы изменить `composer.json` который находится в корневой директории
проекта:
160 161 162 163 164

```json
{
    "name": "yiisoft/yii2-app-advanced",
    "description": "Yii 2 Advanced Application Template",
165
    "keywords": ["yii2", "framework", "advanced", "application template"],
166 167 168 169 170 171 172 173 174 175 176 177 178 179 180
    "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-bootstrap": "*",
181 182 183 184
        "yiisoft/yii2-swiftmailer": "*"
    },
    "require-dev": {
        "yiisoft/yii2-codeception": "*",
185
        "yiisoft/yii2-debug": "*",
186 187
        "yiisoft/yii2-gii": "*",
        "yiisoft/yii2-faker": "*"
188
    },
189 190
    "config": {
        "process-timeout": 1800
191 192
    },
    "extra": {
193 194 195 196
        "asset-installer-paths": {
            "npm-asset-library": "vendor/npm",
            "bower-asset-library": "vendor/bower"
        }
197 198 199 200
    }
}
```

201 202
Во-первых, мы обновляем основную информацию. Меняем значения `name`, `description`, `keywords`, `homepage` и `support`
на соответствующие вашему проекту.
203

204 205
А сейчас интересная часть. вы можете добавить больше пакетов, необходимых для вашего приложения, в раздел `require`.
Все они с [packagist.org](https://packagist.org/). Стоит его изучить так как там множество пакетов с полезным кодом. 
206

207 208 209
После того как ваш `composer.json` настроен, вы можете выполнить в консоли команду `composer update --prefer-dist`,
подождать пока требуемые пакеты загрузятся и установятся, и начать их использовать. Автозагрузка классов этих пакетов
будет осуществляться автоматически. 
210

211 212
Создание ссылок на frontend из backend 
--------------------------------------
213

214 215
Часто приходится создавать ссылки из приложения backend на приложение frontend. Так как frontend может использовать
собственную конфигурация менеджера URL, вам придётся продублировать её в конфигурации backend под новым именем: 
216 217 218 219 220

```php
return [
    'components' => [
        'urlManager' => [
221
            // конфигурация основного менеджера URL в конфигурации backend
222 223
        ],
        'urlManagerFrontend' => [
224
            // конфигурация менеджера URL из frontend
225 226 227 228 229 230
        ],

    ],
];
```

231 232
После того, как это будет сделано, вы сможете получить URL, указывающий на frontend, следующим способом:

233 234 235
```php
echo Yii::$app->urlManagerFrontend->createUrl(...);
```