Приложения являются сервис локаторами. Они являются набором компонентов приложения, которые предоставляются различные сервисы по обработке запросов. Например, компонент urlManager отвечает за маршрутизацию запросов к соответствующим контроллерам, db компонент предоставляет 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;
        },
    ],
]

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

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

Например, следующая конфигурация приложения гарантирует, что компонент log всегда загрузится:

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

Основные компоненты приложений

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

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

  • assetManager - управляет и публикует ресурсы приложения
  • db - представляет собой соединение с базой данных, для выполнения запросов в БД. Следует обратить внимание, что при настройке данного компонента необходимо указать класс компонента, а также другие необходимые свойства, такие как yii\db\Connection::$dsn.
  • errorHandler - обрабатывает PHP ошибки и исключения.
  • formatter - определяет форматы данные, отображаемые для пользователей. Например, номер может отображаться с разделителем, дата может быть отформатирована в long формате.
  • i18n - поддерживает перевод сообщений и форматирование.
  • log  - управление журналом сообщений.
  • mailer - поддерживает составление и отправку почты.
  • response - представляет отправку ответа конечным пользователям.
  • request - представляет прием запроса, полученного от конечного пользователя
  • session - представляет информацию о сеансе сессии. Этот компонент доступен только в веб-приложениях.
  • urlManager - поддерживает синтаксическое создание и анализ адреса.
  • user - представляет информацию аутентификации пользователя. Этот компонент доступен только в веб-приложениях.
  • view - поддерживает отображение рендинга.