tutorial-advanced-app.md 14.5 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 22 23 24

    composer global require "fxp/composer-asset-plugin:1.0.0-beta3"
    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 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 53
- для приложения frontend директория `/path/to/yii-application/frontend/web/` и URL `http://yourdomain/frontend/`
- для приложения backend директория `/path/to/yii-application/frontend/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 142 143 144 145 146 147 148

- `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`

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 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204

```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"
        ]
    }
}
```

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

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

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

215 216
Создание ссылок на frontend из backend 
--------------------------------------
217

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

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

    ],
];
```

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

237 238 239
```php
echo Yii::$app->urlManagerFrontend->createUrl(...);
```