Додатки є Локаторами служб. Вони зберігають багато так званих
компонентів додатку, які надають різноманітні служби для обробки запитів. Наприклад,
компонент urlManager
відповідає за маршрутизацію веб-запитів до потрібного контролера;
компонент db
надає служби для роботи з базою даних; і т. д.
Кожний компонент додатка має свій унікальний ідентифікатор, який дозволяє ідентифікувати його серед інших різноманітних компонентів в одному і тому ж додатку. Ви можете отримати доступ до компонента за допомогою виразу:
\Yii::$app->componentID
Наприклад, ви можете використовувати \Yii::$app->db
для отримання з’єднання з БД,
і \Yii::$app->cache
для отримання доступу до основного компонента кешу, зареєстрованих в додатку.
Компонент додатка створюється при першому звертанні через попередній вираз. Будь-які подальші звертання будуть повертати той же екземпляр компонента.
Компонентами додатку можуть бути будь-які об’єкти. Ви можете зареєструвати їх за допомогою властивості yii\base\Application::components в конфігурації додатка. Наприклад,
[
'components' => [
// реєстрація компонента "cache" за допомогою назви класу
'cache' => 'yii\caching\ApcCache',
// реєстрація компонента "db" за допомогою масиву конфігурації
'db' => [
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=localhost;dbname=demo',
'username' => 'root',
'password' => '',
],
// реєстрація компонента "search" за допомогою анонімної функції
'search' => function () {
return new app\components\SolrService;
},
],
]
Info: Хоча ви можете зареєструвати стільки компонентів в додатку скільки вам потрібно, все ж таки варто робити це осмислено. Компоненти додатку схожі на глобальні змінні. Використання дуже великої кількості компонентів додатку може потенційно зробити ваш код складним для тестування і подальшої підтримки. У більшості випадків ви можете просто створити локальний компонент і використовувати його при необхідності.
Як згадувалося вище, компонент додатка буде створено при першому звертанні. Якщо до нього не буде зроблено звертань під час запиту - його взагалі не буде створено. Однак, за необхідності, ви можете створювати екземпляр компонента додатка для кожного запиту, навіть якщо до нього не зверталися явно. Щоб зробити це, ви можете додати ідентифікатор компонента до властивості bootstrap додатка.
Наприклад, наступна конфігурація додатка завжди гарантує створення компонента log
:
[
'bootstrap' => [
'log',
],
'components' => [
'log' => [
// конфігурація для компонента "log"
],
],
]
В Yii є декілька вбудованих компонентів додатку із фіксованими ідентифікаторами та конфігураціями за замовчуванням. Наприклад, компонент request використовується для збору інформації про запит користувача і розбору його у певний маршрут; компонент db являє собою з’єднання з базою даних, через яке ви можете виконувати запити до бази даних. Саме з допомогою цих вбудованих компонентів Yii додатки можуть обробляти запити користувача.
Нижче наведено перелік вбудованих компонентів додатку. Ви можете налаштовувати їх так само, як і інші компоненти додатку. Коли ви сконфігуруєте вбудований компонент додатку і не вкажете клас цього компонента, то буде використовуватись значення за замовчуванням.