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

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

6 7 8 9 10
This application template also goes a bit further regarding features and provides essential database, signup and password restore out of the box.-->
Этот шаблон предназначен для крупных проектов разрабатываемых в командах где администраторская часть (backend) отделена
от приложения пользователя (frontend), прилжения располагаются на нескольких серверах и т.д. Этот шаблон приложения включает
значительное количество возможностей, таких как начальная схема базы данных, регистрация пользователя и воостановление его
пароля. 
11 12

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


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

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

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

    composer global require "fxp/composer-asset-plugin:1.0.0-beta3"
    composer create-project --prefer-dist yiisoft/yii2-app-advanced yii-application

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


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

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

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

    ```
    php /path/to/yii-application/init
    ```
42 43

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

159 160
После того как шаблон приложения установлен, хорошо бы изменить `composer.json` который находится в корневой директории
проекта:
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 205

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

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

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

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

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

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

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

    ],
];
```

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

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