Компоненты приложения Yii 2
Компоненты приложения Yii 2

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

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

Старт! Честный VDS/VPS, на котором «Лунная База» живет уже 20+ лет

Задумываетесь о том, чтобы поднять свой pet-проект, сайт клиента или настроить окружение для разработки? Уже пора подумать, где арендовать железо.

Лунная База хостится на FirstVDS более 20 лет. Мыслей о том, чтобы перебраться на другой хостинг, не было ни разу (хотя опыт работы с другими вариантами, конечно, есть).

Бывали разные ситуации, но они бывают на любом железе. Главное, что нужно понять: здесь нет маркетинговой шелухи и сказок про «мы всё сделаем за вас». Если вы берете VDS — вам дают полный root, возможность накатить любую ОС и не лезут в ваши конфиги.

Если в саппорт написать с вопросом по вашему коду и получить ответ: «Читайте документацию и разбирайтесь сами» или «Обратитесь к профильному специалисту» — это не повод обижаться. Это повод углубить свои знания в DevOps и сайтостроении! Бегите от тех, кто пообещает: «Мы всё чиним и настраиваем абсолютно бесплатно!». Никто никогда не работает «по доброте душевной» в ущерб себе, а бесплатный сыр в администрировании обычно заканчивается сломанной базой данных.

Что по факту: Гибкое масштабирование ядер и RAM, экономия по сравнению с физическими серверами и адекватная панель ispmanager, если она вам нужна.



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

\Yii::$app->componentID

Например, вы можете использовать \Yii::$app->db для получения [[yii\db\Connection|соединения с БД]], и \Yii::$app->cache для получения доступа к основному компоненту [[yii\caching\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: Хотя вы можете зарегистрировать столько компонентов в приложении сколько вам нужно, все таки стоит это делать разумно. Компоненты приложения похожи на глобальные переменные. Использование слишком большого количества компонентов приложения может потенциально сделать ваш код сложным для разработки и тестирования. В большинстве случаев вы можете просто создать локальный компонент и использовать его при необходимости.

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

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

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

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

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

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

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

  • [[yii\web\AssetManager|assetManager]]: используется для управления и опубликования ресурсов приложения. Более детальная информация представлена в разделе Ресурсы;
  • [[yii\db\Connection|db]]: представляет собой соединение с базой данных, через которое вы можете выполнять запросы. Обратите внимание, что когда вы конфигурируете данный компонент, вы должны указать класс компонента также как и остальные необходимые параметры, такие как [[yii\db\Connection::dsn]]. Более детальная информация представлена в разделе Объекты доступа к данным (DAO);
  • [[yii\base\Application::errorHandler|errorHandler]]: осуществляет обработку PHP ошибок и исключений. Более детальная информация представлена в разделе Обработка ошибок;
  • [[yii\i18n\Formatter|formatter]]: форматирует данные для отображения их конечному пользователю. Например, число может быть отображено с различными разделителями, дата может быть отображена в формате long. Более детальная информация представлена в разделе Форматирование данных;
  • [[yii\i18n\I18N|i18n]]: используется для перевода сообщений и форматирования. Более детальная информация представлена в разделе Интернационализация;
  • [[yii\log\Dispatcher|log]]: обработка и маршрутизация логов. Более детальная информация представлена в разделе Логирование;
  • [[yii\swiftmailer\Mailer|mailer]]: предоставляет возможности для составления и рассылки писем. Более детальная информация представлена в разделе Отправка почты;
  • [[yii\base\Application::response|response]]: представляет собой данные от сервера, которые будет направлены пользователю. Более детальная информация представлена в разделе Ответы;
  • [[yii\base\Application::request|request]]: представляет собой запрос, полученный от конечных пользователей. Более детальная информация представлена в разделе Запросы;
  • [[yii\web\Session|session]]: информация о сессии. Данный компонент доступен только в [[yii\web\Application|веб приложениях]]. Более детальная информация представлена в разделе Сессии и куки;
  • [[yii\web\UrlManager|urlManager]]: используется для разбора и создания URL. Более детальная информация представлена в разделе Разбор и генерация URL;
  • [[yii\web\User|user]]: представляет собой информацию аутентифицированного пользователя. Данный компонент доступен только в [[yii\web\Application|веб приложениях]]. Более детальная информация представлена в разделе Аутентификация;
  • [[yii\web\View|view]]: используется для отображения представлений. Более детальная информация представлена в разделе Представления.

Самый честный хостинг за 20+ лет существования Лунной Базы

Задумываешься о том, чтобы поднять свой сайт в Интернете? Уже пора подумать о том, какой хостинг выбрать?

Лунная База хостится 20+ лет на firstDVS. При этом, мыслей о том, чтобы перебраться на другой хостинг не было. (Но, при этом есть опыт работы с другими вариантами.)

Бывали с firstDVS разные ситуации, но, они бывают на всех хостингах. Единственное, что тут важно понять, - это то, что никто ничего тебе не будет впаривать... Но, и работать за тебя тоже никто не станет. Если в саппорт ответили: «Читайте по ссылке и разбирайтесь сами...» или вообще «Обратитесь за помощью к специалисту», - это повод углубить свои знания в области сайтостроения, а не бежать к тем, что пообещают: «Мы всё чиним и всё делаем за своих клиентов абсолютно бесплатно!» Никто никогда ничего ни за кого "по доброте душевной" не делал, не делает и не будет делать!

Старт! Горячий старт на просторы интернета
Старт! Горячий старт на просторы интернета
Старт! Меню