# Компоненты приложения ¶

Приложения являются сервис локаторами. Они хранят множество так называемых компонентов приложения, которые предоставляют различные средства для обработки запросов. Например, компонент `urlManager` ответственен за маршрутизацию веб запросов к нужному контроллеру; компонент `db` предоставляет средства для работы с базой данных; и т. д.

Каждый компонент приложения имеет свой уникальный ID, который позволяет идентифицировать его среди других различных компонентов в одном и том же приложении. Вы можете получить доступ к компоненту следующим образом:

    \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;
            },
        ],
    ]

> Информация: Хотя вы можете зарегистрировать столько компонентов в приложении сколько вам нужно, все таки стоит это делать разумно. Компоненты приложения похожи на глобальные переменные. Использование слишком большого количества компонентов приложения может потенциально сделать ваш код сложным для разработки и тестирования. В большинстве случаев вы можете просто создать локальный компонент и использовать его при необходимости.

## Компоненты начальной загрузки ¶

Как упоминалось выше, компонент приложения будет создан только при первом обращении к нему. Однако может возникнуть необходимость в наличии созданного компонента при каждом запросе, даже если напрямую к нему ни разу не обращались. Для этого необходимо указать ID компонента в качестве элемента свойства bootstrap.

К примеру, при данной конфигурации компонент `log` всегда подгружается при загрузке:

    [
        'bootstrap' => [
            'log',
        ],
        'components' => [
            'log' => [
                // конфигурация для компонента `log`
            ],
        ],
    ]

## Встроенные компоненты приложения ¶

В Yii есть несколько встроенных компонентов приложения, с фиксированными ID и конфигурациями по умолчанию. Например, компонент request используется для сбора информации о запросе пользователя и разбора его в определенный маршрут; компонент db представляет собой соединение с базой данных, через которое вы можете выполнять запросы. Именно с помощью этих встроенных компонентов Yii приложения могут обработать запрос пользователя.

Ниже представлен список встроенных компонентов приложения. Вы можете конфигурировать их также как и другие компоненты приложения. Когда вы конфигурируете встроенный компонент приложения и не указываете класс этого компонента, то значение по умолчанию будет использовано.

- assetManager: используется для управления и опубликования ресурсов приложения. Более детальная информация представлена в разделе Ресурсы;
- db: представляет собой соединение с базой данных, через которое вы можете выполнять запросы. Обратите внимание, что когда вы конфигурируете данный компонент, вы должны указать класс компонента также как и остальные необходимые параметры, такие как yii\db\Connection::$dsn. Более детальная информация представлена в разделе Объекты доступа к данным (DAO);
- errorHandler: осуществляет обработку PHP ошибок и исключений. Более детальная информация представлена в разделе Обработка ошибок;
- formatter: форматирует данные для отображения их конечному пользователю. Например, число может быть отображено с различными разделителями, дата может быть отображена в формате `long`. Более детальная информация представлена в разделе Форматирование данных;
- i18n: используется для перевода сообщений и форматирования. Более детальная информация представлена в разделе Интернационализация;
- log: обработка и маршрутизация логов. Более детальная информация представлена в разделе Логирование;
- mailer: предоставляет возможности для составления и рассылки писем. Более детальная информация представлена в разделе Отправка почты;
- response: представляет собой данные от сервера, которые будет направлены пользователю. Более детальная информация представлена в разделе Ответы;
- request: представляет собой запрос, полученный от конечных пользователей. Более детальная информация представлена в разделе Запросы;
- session: информация о сессии. Данный компонент доступен только в веб приложениях. Более детальная информация представлена в разделе Сессии и куки;
- urlManager: используется для разбора и создания URL. Более детальная информация представлена в разделе Разбор и генерация URL;
- user: представляет собой информацию аутентифицированного пользователя. Данный компонент доступен только в веб приложениях. Более детальная информация представлена в разделе Аутентификация;
- view: используется для отображения представлений. Более детальная информация представлена в разделе Представления.