structure-applications.md 40.2 KB
Newer Older
1
Додатки
2
=======
3 4

Додатки це об’єкти, які керують всією структурою і життєвим циклом прикладної системи Yii.
5 6
Кожна Yii прикладна система містить у собі один об’єкт додатка, який створюється у 
[вхідному скрипті](structure-entry-scripts.md) і глобально доступний через `\Yii::$app`.
7

8 9
> Інформація: В залежності від контексту, коли ми говорим "додаток", це може означати як об’єкт додатка, 
  так і прикладну систему додатка вцілому.
10

11 12
Існує два типи додатків: [[yii\web\Application|веб додатки]] та [[yii\console\Application|консольні додатки]].
Як можна здогадатися із назв, перший тип, в основному, займається обробкою веб запитів, а другий - консольними командами.
13 14 15 16


## Конфігурації додатка <a name="application-configurations"></a>

17 18
Коли [вхідний скрипт](structure-entry-scripts.md) створює додаток, він завантажить 
[конфігурацію](concept-configurations.md) та застосує її до додатка, наприклад:
19 20 21 22 23 24 25 26 27 28 29 30

```php
require(__DIR__ . '/../vendor/autoload.php');
require(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php');

// завантаження конфігурації додатка
$config = require(__DIR__ . '/../config/web.php');

// створення об’єкта додатка і його налаштування
(new yii\web\Application($config))->run();
```

31 32 33
Як і звичайні [конфігурації](concept-configurations.md), конфігурації додатка вказують як саме слід ініціювати 
властивості об’єктів додатка. Через те, що конфігурації додатків часто є складними, вони розбиваються на декілька
[конфігураційних файлів](concept-configurations.md#configuration-files), наприклад, файл `web.php` у наведеному вище прикладі.
34 35


36
## Властивості додатка <a name="application-properties"></a>
37

38 39 40 41
Існує багато важливих властивостей додатка, які ви налаштовуєте в конфігураціях додатка. 
Ці властивості, зазвичай, описують середовище, у якому працює додаток. Наприклад, 
додаток мусить знати яким чином завантажувати [контролери](structure-controllers.md), 
де зберігати тимчасові файли, і т.п. Нижче ми розглянемо дані властивості.
42 43 44 45


### Об’язкові властивості <a name="required-properties"></a>

46 47
В кожному додатку, ви маєте налаштувати мінімум дві властивості: [[yii\base\Application::id|id]]
та [[yii\base\Application::basePath|basePath]].
48 49 50 51


#### [[yii\base\Application::id|id]] <a name="id"></a>

52 53 54
Властивість [[yii\base\Application::id|id]] є унікальним ID додатка, який відрізняє його від решти інших додатків.
Здебільшого, це використовується всередені системи. Хоч і не є обов’язковим, але для кращої сумістності рекомендується 
використовувати буквено-цифрові символи при налаштуванні ID додатка.
55 56 57 58


#### [[yii\base\Application::basePath|basePath]] <a name="basePath"></a>

59 60 61
Властивість [[yii\base\Application::basePath|basePath]] вказує на кореневу директорію додатка. Ця директорія, 
яка містить весь код прикладної системи додатка. В цій директорії, зазвичай, можуть знаходитись підкаталоги `models`,
`views`, `controllers`, які містять код, що відповідає шаблону проектування MVC.
62

63 64 65
Ви можете налаштувати властивість [[yii\base\Application::basePath|basePath]], вказавши прямий шлях до директорії 
через [псевдонім шляху](concept-aliases.md). В обох випадках, вказана директорія має існувати, інакше буде отримано 
виняток. Шлях буде нормалізовано за допомогою виклику функції `realpath()`.
66

67 68 69 70
Властивість [[yii\base\Application::basePath|basePath]] часто використовується для важливих шляхів (наприклад, шлях до
runtime директорії). Саме з цієї причини, псевдонім шляху `@app` є зумовлений вказувати на дану директорію. 
Похідні шляхи потім можуть бути сформовані за допомогою цього псевдоніму шляху (наприклад, `@app/runtime` для
звертання до runtime директорії).
71 72 73 74


### Важливі властивості <a name="important-properties"></a>

75 76
Властивості, перелічені в даному підрозділі, частіш за все повинні бути визначені, тому що вони можуть
відрізнятися у різних додатках.
77 78 79 80


#### [[yii\base\Application::aliases|aliases]] <a name="aliases"></a>

81
Дана властивість дозволяє налаштувати вам безліч [псевдонімів](concept-aliases.md) у рамках масиву.
RichWeber committed
82
Ключами масива є імена псевдонімів, а значеннами - відповідні значення шляхів. Наприклад,
83 84 85 86 87 88 89 90 91 92

```php
[
    'aliases' => [
        '@name1' => 'path/to/path1',
        '@name2' => 'path/to/path2',
    ],
]
```

93 94
Ця властивість доступна таким чином, аби ви змогли вказувати псевдоніми в рамках конфігурації додатка, 
а не викликаючи метод [[Yii::setAlias()]].
95 96 97 98


#### [[yii\base\Application::bootstrap|bootstrap]] <a name="bootstrap"></a>

99 100 101 102
Дана властивість є дуже зручною, вона дозволяє вказувати масив компонентів, котрі мусять бути завантажені
у процесі [[yii\base\Application::bootstrap()|початкового завантаження]] додатка. Наприклад, якщо ви хочете, 
щоб [модуль](structure-modules.md) виконував тонке налаштування [URL правил](runtime-routing.md), 
ви можете вказати його ID в якості елемента даної властивості.
103

104
Кожен із елементів даної властивості може вказуватись в одному із наступних форматів:
105

106 107 108
- ID компонента додатка, що вказаний у [компонентах](#components).
- ID модуля, що вказаний у [модулях](#modules).
- назва класа.
109
- масив конфігурації.
110
- анонімна функциія, яка створює та повертає об’єкт компонента.
111 112 113 114 115 116 117 118 119 120

Наприклад,

```php
[
    'bootstrap' => [
        // ID компонента додатка або модуля
        'demo',

        // назва класа
121
        'app\components\Profiler',
122 123 124 125 126

        // масив конфігурації
        [
            'class' => 'app\components\Profiler',
            'level' => 3,
127 128 129 130 131 132
        ],

        // анонімна функція
        function () {
            return new app\components\Profiler();
        }
133 134 135 136
    ],
]
```

137 138 139 140 141 142 143 144 145 146 147
> Інформація: Якщо ID модуля співпадає з ID компонента додатка, перевага буде віддана ініціалізації компонента додатка
  під час початкового завантаження. Якщо ж ви хочете використати модуль, вам потрібно використати анонімну функцію, 
  як показано нижче:
> ```php
[
    function () {
        return Yii::$app->getModule('user');
    },
]
```

148

149 150 151 152 153
Під час початкового завантаження, буде створено кожний компонент. Якщо клас компонента реалізує інтерфейс 
[[yii\base\BootstrapInterface]], то буде викликаний його метод [[yii\base\BootstrapInterface::bootstrap()|bootstrap()]].

Ще одним практичним прикладом є конфігурація [базового шаблону додатка](start-installation.md), у якій модулі
`debug` і `gii` визначені як компоненти початкового завантаження, коли додаток знаходиться режимі розробки.
154 155 156 157 158 159 160 161 162 163 164 165

```php
if (YII_ENV_DEV) {
    // налаштування конфігурації для середовища 'dev'
    $config['bootstrap'][] = 'debug';
    $config['modules']['debug'] = 'yii\debug\Module';

    $config['bootstrap'][] = 'gii';
    $config['modules']['gii'] = 'yii\gii\Module';
}
```

166 167 168
> Примітка: Якщо вказувати велику кількість компонентів у `bootstrap` - це негативно позначиться на продуктивності
  додатка, оскільки для кожного запиту буде виконуватись один й той самий набір компонентів. Таким чином, потрібно
  розсудливо використовувати компоненти початкового завантаження.
169 170 171 172


#### [[yii\web\Application::catchAll|catchAll]] <a name="catchAll"></a>

173 174 175
Дана властивість підтримується тільки [[yii\web\Application|веб додатками]]. Вона вказує на 
[дії контролера](structure-controllers.md), які мусять обробляти всі вхідні запити від користувача. Переважно, 
це використовується, коли додаток знаходиться в режимі обслуговування і повинен обробити всі запити через одну дію.
176

177 178
Конфігурація є масивом, перший елемент якого вказує на маршрут події. Решта елементів масиву у форматі ключ-значення
вказують на додаткові параметри, які мають бути передані події. Наприклад,
179 180 181 182 183 184 185 186 187 188 189 190 191 192

```php
[
    'catchAll' => [
        'offline/notice',
        'param1' => 'value1',
        'param2' => 'value2',
    ],
]
```


#### [[yii\base\Application::components|components]] <a name="components"></a>

193 194
Дана властивість є найважливішою. Вона дозволяє вам зареєструвати іменні компоненти у 
[компонентах додатку](structure-application-components.md), які ви можете використовувати в інших місцях. Наприклад,
195 196 197 198 199 200 201 202 203 204 205 206 207 208 209

```php
[
    'components' => [
        'cache' => [
            'class' => 'yii\caching\FileCache',
        ],
        'user' => [
            'identityClass' => 'app\models\User',
            'enableAutoLogin' => true,
        ],
    ],
]
```

210 211
Кожен компонент додатка вказаний масивом у форматі ключ-значення. Ключ являє собою ID компонента додатка, 
у той час як значення являє собою назву класа або [конфігурацію](concept-configurations.md).
212

213
Ви можете зареєструвати будь-який компонент у додатку, який потім буде доступний глобально 
214
за допомогою виразу `\Yii::$app->componentID`.
215 216 217 218 219 220

Більш детальна інформація наведена в розділі [Компоненти додатка](structure-application-components.md).


#### [[yii\base\Application::controllerMap|controllerMap]] <a name="controllerMap"></a>

221 222 223 224 225
Дана властивість дозволяє вам встановлювати відповідність між ID контролера та його класом. За замовчуванням, 
Yii встановлює відповідність між ID контролера та його класом згідно [домовленості](#controllerNamespace) 
(таким чином, ID `post` буде відповідати `app\controllers\PostController`). За допомогою налаштування даної властивості
ви можете змінити домовленість для необхідних контролерів. У наведеному прикладі, `account` буде 
відповідати `app\controllers\UserController`, в той час, як `article` буде відповідати `app\controllers\PostController`.
226 227 228 229 230 231 232 233 234 235 236 237 238 239 240

```php
[
    'controllerMap' => [
        [
            'account' => 'app\controllers\UserController',
            'article' => [
                'class' => 'app\controllers\PostController',
                'enableCsrfValidation' => false,
            ],
        ],
    ],
]
```

241 242
Ключами масиву даної властивості є ID контролерів, а значеннями є назви класів контролерів або 
[конфігурації](concept-configurations.md).
243 244 245 246


#### [[yii\base\Application::controllerNamespace|controllerNamespace]] <a name="controllerNamespace"></a>

247 248 249 250
Дана властивість вказує на простір імен за замовчуванням, під яким повинні знаходитись класи контролерів.
За замовчуванням, це значення рівне `app\controllers`. Якщо ID контролера є `post`, то, згідно домовленості, 
відповідна назва класу контролера (без простору імен) буде `PostController`, а повна назва класу буде 
`app\controllers\PostController`.
251

252 253
Класи контролерів можуть також знаходитись у підкаталогах директорії, що відповідає її простору імені.
Наприклад, ID контролера `admin/post` відповідає повне ім’я класа контролера `app\controllers\admin\PostController`.
254

255 256 257
Дуже важливо, щоб повне ім’я класа контролера могло бути використане [автозавантаженням](concept-autoloading.md)
і фактичний простір імен вашого контролера відповідав цій властивості. В іншому випадку, ви отримаєте помилку
із заголовком "Сторінка не знайдена", коли спробуєте отримати доступ до додатка.
258

259 260
У випадку, якщо ви хочете змінити домовленість, яку розглянуто вище, ви можете використовувати властивість 
[controllerMap](#controllerMap).
261 262 263 264


#### [[yii\base\Application::language|language]] <a name="language"></a>

265 266 267
Дана властивість вказує на мову додатка, на якій додаток повинен відображати зміст кінцевому користувачу.
За замовчуванням, значення даної властивості рівне `en`, означаючи англійську мову.
Якщо ваш додаток підтримує декілька мов, ви необхідно налаштувати дану властивість.
268

269 270 271 272
Значення даної властивості визначає кілька різних аспектів [інтернаціоналізації](tutorial-i18n.md), в тому числі 
переклади повідомлень, форматування дат, форматування чисел, і т. п. Наприклад, віджет [[yii\jui\DatePicker]] 
використовує дану властивість для визначення мови за замовчуванням, на якій має бути зображений календар і 
формат даних для календаря.
273

274
Рекомендується вказувати мову у рамках стандатру [IETF](http://en.wikipedia.org/wiki/IETF_language_tag).
275 276
Наприклад, для англійської мови використовується `en`, в той час як для англійської в США - `en-US`.

277
Більш детальна інформація наведена у розділі [Інтернаціоналізація](tutorial-i18n.md).
278 279 280 281


#### [[yii\base\Application::modules|modules]] <a name="modules"></a>

282
Дана властивість визначає [модулі](structure-modules.md), які містить додаток.
283

284 285
Значенням властивості є масив імен класів модулів або [конфігурацій](concept-configurations.md), а ключами цього масиву
виступають ID модулів. Наприклад,
286 287 288 289

```php
[
    'modules' => [
290
        // модуль "booking" визначено класом модуля
291 292
        'booking' => 'app\modules\booking\BookingModule',

293
        // модуль "comment" визначено масивом конфігурації
294 295 296 297 298 299 300 301
        'comment' => [
            'class' => 'app\modules\comment\CommentModule',
            'db' => 'db',
        ],
    ],
]
```

302
Більш детальна інформація наведена у розділі [Модулі](structure-modules.md).
303 304 305 306


#### [[yii\base\Application::name|name]] <a name="name"></a>

307 308 309
Дана властивість вказує на ім’я додатка, яке може бути відображене кінцевому користувачу. На відміну від властивості
[[yii\base\Application::id|id]], яка має бути унікальною, значення даної властивості потрібне в основному для
відображення і не є обов’язково є унікальною.
310 311 312 313 314 315

Якщо ваш код не використовує дану властивість, то ви можете не налаштовувати її.


#### [[yii\base\Application::params|params]] <a name="params"></a>

316 317 318
Дана властивість описує масив глобально доступних параметрів додатка. Замість того, щоб використовувати жорстко 
фіксовані числа і строки у вашому коді, краще оголосити їх параметрами додатка в одному місці і використовувати 
в необхідних місцях коду. Наприклад, ви можете визначити розмір прев’ю-зображень для зображеннь наступним чином:
319 320 321 322 323 324 325 326 327

```php
[
    'params' => [
        'thumbnail.size' => [128, 128],
    ],
]
```

328
Потім, коли вам потрібно використати дані значення у вашому коді, ви можете зробити це наступним чином:
329 330 331 332 333 334

```php
$size = \Yii::$app->params['thumbnail.size'];
$width = \Yii::$app->params['thumbnail.size'][0];
```

335 336
Якщо пізніше вам знадобиться змінити розмір прев’ю зображення, то вам потрібно буде змінити це значення лише у
конфігураційному файлі додатка, не змінюючи будь-який залежний код.
337 338 339 340


#### [[yii\base\Application::sourceLanguage|sourceLanguage]] <a name="sourceLanguage"></a>

341 342 343
Дана властивість вказує мову, на якій написаний код додатка. За замовчуванням значення рівне `'en-US'`, 
що означає англійську мову (США). Ви повинні змінити дану властивість, якщо мовою змісту у вашому коді
є не англійська мова.
344

345 346 347
Аналогічно властивості [language](#language), ви повинні вказати дану властивість у рамках стандарту 
[IETF](http://en.wikipedia.org/wiki/IETF_language_tag). Наприклад, для англійської мови 
використовується `en`, в той час як для англійської в США - `en-US`.
348

349
Більш детальна інформація наведена у розділі [Інтернаціоналізація](tutorial-i18n.md).
350 351 352 353


#### [[yii\base\Application::timeZone|timeZone]] <a name="timeZone"></a>

354 355 356
Дана властивість надає альтернативний спосіб встановлення часової зони за замовчуванням у процесі роботи додатка.
Таким чином, вказуючи дану властивість, ви, по суті, викликаєте PHP функцію 
[date_default_timezone_set()](http://php.net/manual/en/function.date-default-timezone-set.php). Наприклад,
357 358 359

```php
[
360
    // 'Europe/Kiev' для України
361 362 363 364 365 366
    'timeZone' => 'America/Los_Angeles',
]
```

#### [[yii\base\Application::version|version]] <a name="version"></a>

367 368
Дана властивість вказує на версію додатка. За замовчуванням значення рівне `'1.0'`. Ви можете не змінювати
дану властивість, якщо ваш код не використовує її.
369 370 371 372


### Корисні властивості <a name="useful-properties"></a>

373 374 375
Властивості, які перераховані в даному розділі, не є часто змінюваними, так як їх значення за замовчуванням
відповідають загальноприйнятим домовленостям. Однак, ви можете їх налаштувати, якщо вам потрібно використовувати 
інші значення.
376 377 378 379


#### [[yii\base\Application::charset|charset]] <a name="charset"></a>

380 381 382
Властивість вказує кодування, яке використовує додаток. За замовчуванням значення рівне `'UTF-8'`,
яке має бути незмінним для більшості додатків, тільки якщо ви не працюєте із застарілим кодом, який використовує 
значний об’єм не юнікод даних.
383 384 385 386


#### [[yii\base\Application::defaultRoute|defaultRoute]] <a name="defaultRoute"></a>

387 388 389 390
Властивість вказує [маршрут](runtime-routing.md), який повинен використовувати додаток, коли його не вказано у 
вхідному запиті. Маршрут може складатись із ID модуля, ID контролера і/або ID дії. Наприклад, `help`,
`post/create`, `admin/post/create`. Якщо дію не вказано, то буде використано значення за замовчуванням,
що вказане у [[yii\base\Controller::defaultAction]].
391

392 393 394
Для [yii\web\Application|веб додатків] значення за замовчуванням даної властивості рівне `'site'`, що означає
контролер `SiteController` і його дія за замовчуванням. Таким чином, якщо ви спробуєте отримати доступ 
до додатка, не вказавши маршрут - буде відображено результат дії `app\controllers\SiteController::actionIndex()`.
395

396 397 398
Для [yii\console\Application|консольних додатків] значення за замовчуванням рівне `'help'`, яке означає,
що повинна використовуватись вбудована команда [[yii\console\controllers\HelpController::actionIndex()]].
Таким чином, якщо ви виконаєте команду `yii` без аргументів, вам будет зображена довідкова інформація.
399 400 401 402


#### [[yii\base\Application::extensions|extensions]] <a name="extensions"></a>

403 404 405 406 407
Дана властивість описує перелік [розширень](structure-extensions.md), які встановлені і використовуються додатком. 
За замовчуванням, значенням даної властивості буде масив, отриманий із файла `@vendor/yiisoft/extensions.php`. 
Файл `extensions.php` генерується і підтримується автоматично, коли ви використовуєте 
[Composer](http://getcomposer.org) для встановлення розширень.
Таким чином, у більшості випадків, вам не потрібно налаштовувати дану властивість.
408

409
В особливих випадках, коли ви хочете керувати розширеннями власноруч, ви можете вказати дану властивість наступним чином:
410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429

```php
[
    'extensions' => [
        [
            'name' => 'extension name',
            'version' => 'version number',
            'bootstrap' => 'BootstrapClassName',  // опціонально, може бути також масив конфігурації
            'alias' => [  // опціонально
                '@alias1' => 'to/path1',
                '@alias2' => 'to/path2',
            ],
        ],

        // ... аналогічно для решти розширень ...

    ],
]
```

430 431 432
Як бачите, властивість є масивом специфікацій розширень. Кожне розширення вказано масивом, який складається з елементів
`name` і `version`. Якщо розширення має бути виконано в процесі [початкового завантаження](runtime-bootstrapping.md), 
то слід вказати елемент у `bootstrap` властивості, який може бути іменем класа або масивом [конфігурації](concept-configurations.md).
433 434 435 436 437
Розширення також може визначати декілька [псевдонімів](concept-aliases.md).


#### [[yii\base\Application::layout|layout]] <a name="layout"></a>

438 439 440 441 442
Дана властивість визначає ім’я шаблону за замовчуванням, який мусить бути використаний при формувані 
[представлення](structure-views.md). Значення за замовчуванням рівне `'main'`, яке означає, що має бути використаний 
шаблон `main.php` в [директорії шаблонів](#layoutPath). Якщо обидві властивості, [директорія шаблонів](#layoutPath) 
та [директорія представлень](#viewPath), приймають значення за замовчуванням, то файл шаблону за замовчуванням може 
бути представлений псевдонімом шляху як `@app/views/layouts/main.php`.
443

444
Для відключення використання шаблону, ви можете вказати дану властивість як `false`, однак це є дуже рідкісним випадком.
445 446 447 448


#### [[yii\base\Application::layoutPath|layoutPath]] <a name="layoutPath"></a>

449 450 451
Дана властивість визначає шлях, по якому слід шукати шаблони. Значення за замовчуванням рівне `layouts`, 
що означає підпапку у [директорії представлень](#viewPath). Якщо значення [директорії представлень](#viewPath) 
є значенням за замовчуванням, то директорія шаблонів за замовчуванням може бути представлена псевдонімом шляху як `@app/views/layouts`.
452

453
Ви можете налаштувати дану властивість як директорію, так і як [псевдонім шляху](concept-aliases.md).
454 455 456 457


#### [[yii\base\Application::runtimePath|runtimePath]] <a name="runtimePath"></a>

458 459
Дана властивість визначає шлях, по якому зберігаються тимчасові файли, такі як: лог файли, кеш файли. 
За замовчуванням це значення рівне директорії, яка преставлена псевдонімом шляху `@app/runtime`.
460

461 462 463
Ви можете налаштувати дану властивість як директорію або як [псевдонім](concept-aliases.md) шляху. Зверніть увагу, 
що дана директорія має бути доступна для запису процесом, який виконує додаток. Також директорія має 
бути захищена від доступу кінцевим користувачам, оскільки файли, які зберігаються в ній,, можуть містити важливу інформацію.
464 465 466 467 468 469

Для спрощення роботи з даною директорією, Yii надає зумовлений псевдонім шляху `@runtime`.


#### [[yii\base\Application::viewPath|viewPath]] <a name="viewPath"></a>

470 471
Дана властивість визначає базову директорію, де містяться всі файли представлень. Значення за замовчуванням являє 
собою псевдонім `@app/views`. Ви можете налаштувати дану властивість як директорі або [псевдонім шляху](concept-aliases.md).
472 473 474 475


#### [[yii\base\Application::vendorPath|vendorPath]] <a name="vendorPath"></a>

476 477 478
Дана властивість визначає директорію сторонніх бібліотек, які використовуються і керуються за допомогою
[Composer](http://getcomposer.org). Вона містить всі сторонні бібліотеки, які використовуються додатком, 
включаючи сам Yii фреймворк. Значеня за замовчуванням являє собою псевдонім `@app/vendor`.
479

480 481
Ви можете налаштувати дану властивість як директорію або [псевдонім шляху](concept-aliases.md). 
При зміні даної властивості, переконайтесь, що ви також змінили відповідним чином налаштування Composer.
482 483 484 485 486 487

Для спрощення роботи з даною директорією, Yii надає зумовлений псевдонім шляху `@vendor`.


#### [[yii\console\Application::enableCoreCommands|enableCoreCommands]] <a name="enableCoreCommands"></a>

488 489
Дана властивість підтримується тільки [[yii\console\Application|консольними додатками]]. Вона вказує чи потрібно
використовувати вбудовані в Yii консольні команди. Значення за замовчуванням рівне `true`.
490 491 492 493


## Події додатка <a name="application-events"></a>

494 495
Додаток викликає декілька подій під час свого життєвого циклу обробки запиту. 
Ви можете приєднати обробники подій в конфігурації додатка наступним чином:
496 497 498 499 500 501 502 503 504

```php
[
    'on beforeRequest' => function ($event) {
        // ...
    },
]
```

505 506
Використання синтаксису `on eventName` детально описано у розділі
[Конфігурації](concept-configurations.md#configuration-format).
507

508 509
Іншим методом приэднання обробників подій у процесі [початкового завантаження додатку](runtime-bootstrapping.md),
одразу після того, як буде створено додаток, є описаний нижче приклад:
510 511 512 513 514 515 516 517 518

```php
\Yii::$app->on(\yii\base\Application::EVENT_BEFORE_REQUEST, function ($event) {
    // ...
});
```

### [[yii\base\Application::EVENT_BEFORE_REQUEST|EVENT_BEFORE_REQUEST]] <a name="beforeRequest"></a>

519
Дана подія виникає *до* того, як додаток починає обробляти вхідний запит. Справжнє ім’я події - `beforeRequest`.
520

521 522 523 524
Коли виникає ця подія, об’єкт додатка вже створений і проініційований. Таким чином, це є
коректним місцем для додавання вашого коду за допомогою подій для перехвату управління обробки запиту.
Наприклад,в обробник події ви може динамічно призначати мову додатка [[yii\base\Application::language]]
в залежності від деяких параметрів.
525 526


527
### [[yii\base\Application::EVENT_AFTER_REQUEST|EVENT_AFTER_REQUEST]] <a name="afterRequest"></a>
528

529 530
Дана подія виникає *після* закінчення обробки запиту додатком, але *до* відправки відповіді.
Справжнє ім’я події - `afterRequest`.
531

532 533
На момент виникнення даної події, обробка запиту завершена і ви можете використати це для побудови постобробки запиту, 
з метою налаштування відповіді.
534

535 536
Зверніть увагу, що у компоненті [[yii\web\Response|response]] також виникають події в процесі відправки даних кінцевому
користувачу. Ці події виникають *після* поточної події.
537 538


539
### [[yii\base\Application::EVENT_BEFORE_ACTION|EVENT_BEFORE_ACTION]] <a name="beforeAction"></a>
540

541 542
Подія виникає *до* виконання кожної [дії контролера](structure-controllers.md).
Справжнє ім’я події - `beforeAction`.
543

544 545
Параметр події є об’єктом [[yii\base\ActionEvent]]. Обробник події може встановлювати властивість
[[yii\base\ActionEvent::isValid]] рівним `false` для зупинки виконання дії.
546 547 548 549 550 551 552 553 554 555 556 557 558 559

Наприклад,

```php
[
    'on beforeAction' => function ($event) {
        if (деяка умова) {
            $event->isValid = false;
        } else {
        }
    },
]
```

560 561 562 563
Зверніть увагу на те, що така ж подія `beforeAction` виникає також у [модулях](structure-modules.md) та 
[контролерах](structure-controllers.md). Об’єкти додатку є першими, хто ініціює дані події,
за якими ініціюють модулі (якщо такі є), і в кінці - контролери. Якщо обробник події встановлює властивість 
[[yii\base\ActionEvent::isValid]] рівним `false`, то всі наступні події не будуть викликані.
564 565


566
### [[yii\base\Application::EVENT_AFTER_ACTION|EVENT_AFTER_ACTION]] <a name="afterAction"></a>
567

568
Ця подія виникає *після* виконання [дії контролера](structure-controllers.md). Справжнє ім’я події - `afterAction`.
569

570 571
Параметр події є об’єктом [[yii\base\ActionEvent]]. Через властивість [[yii\base\ActionEvent::result]]
обробник події може отримати доступ або змінити результат дії контролера. Наприклад,
572 573 574 575 576 577 578 579 580 581 582 583

```php
[
    'on afterAction' => function ($event) {
        if (деяка умова) {
            // modify $event->result
        } else {
        }
    },
]
```

584 585 586
Зверніть увагу на те, що така ж подія `afterAction` виникає також у [модулях](structure-modules.md) та 
[контролерах](structure-controllers.md). Ці об’єкти ініціюють події у зворотньому порядку, порівнюючи із `beforeAction`.
Таким чином, контролери є першими, хто ініціює дану подію, далі йдуть модулі (якщо такі є), і врешті - у додатках.
587 588 589 590


## Життєвий цикл додатка <a name="application-lifecycle"></a>

591 592 593 594
![Життєвий цикл додатка](images/application-lifecycle.png)

Коли [вхідний скрипт](structure-entry-scripts.md) виконується для обробки запиту, додаток пройде наступний
життєвий цикл:
595

596
1. Вхідний скрипт завантажує конфігурацію додатка у якості масива.
597
2. Вхідний скрипт створює новий об’єкт додатка:
598 599 600 601 602 603
  * Викликається метод [[yii\base\Application::preInit()|preInit()]], який налаштовує деякі життєво важливі властивості 
    додатка, як наприклад [[yii\base\Application::basePath|basePath]].
  * Реєструється [[yii\base\Application::errorHandler|обробник помилок]].
  * Налаштовуються властивості додатку.
  * Викликається метод [[yii\base\Application::init()|init()]], який далі викликає метод 
    [[yii\base\Application::bootstrap()|bootstrap()]] для початкового завантаження компонентів.
604
3. Вхідний скрипт викликає метод [[yii\base\Application::run()]] для запуску додатка:
605 606 607 608
  * Ініціюється подія [[yii\base\Application::EVENT_BEFORE_REQUEST|EVENT_BEFORE_REQUEST]].
  * Обробка запиту: розбір інформації запиту на [маршрут](runtime-routing.md) та відповідні параметри;
    створення об’єктів модуля, контролера та дії, згідно вказаного маршруту; ініціювання подій.
  * Ініціюється подія [[yii\base\Application::EVENT_AFTER_REQUEST|EVENT_AFTER_REQUEST]].
609
  * Відповідь надсилається кінцевому користувачу.
610
4. Вхідний скрипт отримує значення статусу виходу із додатка та завершує обробку запиту.