yii2 что такое app

Как работает Yii::app()?

yii2 что такое app. Смотреть фото yii2 что такое app. Смотреть картинку yii2 что такое app. Картинка про yii2 что такое app. Фото yii2 что такое app

1. Инициализация Yii::app()

Смотри, в файле www/index.php такие строки

При отработке строки 2 выполняется код

В строке 12 с учётом динамического связывания выполняется return new CWebApplication($config);

Это была инициализация

2. Использование Yii::app()->module или Yii::app()->component

Ещё раз посмотри на класс CApplication

В методе configure($config) происходит подготовка данных, которые понадобятся позже для таких вызовов как (к примеру) Yii::app()->db

Давай посмотрим на класс Module, в котором и реализуется логика таких вызовов

Попробуем расшифровать вызов Yii::app()->db

Посмотрим, что делает Yii::createComponent($config)

Cложный метод. Суть его в инстанциировании новой сущности какого-то класса, 5 или 6 способов. Дело в том, что этот метод CModule::createComponent() может быть вызван откуда угодно и у него куча вариантов передачи параметров.

Итак, CModule::createComponent() создал и вернул новую сущность. И на выходе из метода CModule::getComponent() полученная сущность записывается в массив CModule->_components под именем ‘db’.

Все последующие вызовы Yii::app()->db будут проверять наличие инстанциинованной сущности в массиве CModule->_components[‘db’] и использовать его, если он там найден

Вызов Yii::app()->db
А. Динамически инициализирует компоненту, по мере необходимости
Б. Настраивает её данными, которые в частновти можно определить через файл конфигурации protected/config/main.php
В. Инициализируют компоненту только один раз за цикл работы PHP приложения

Надеюсь я понятно изложил механизм ленивой инициализации компонент

Источник

Шаблон приложения advanced

Примечание: Данная глава находится в разработке.

Этот шаблон предназначен для крупных проектов разрабатываемых в командах где администраторская часть (backend) отделена от приложения пользователя (frontend), приложения располагаются на нескольких серверах и т.д. Этот шаблон приложения включает значительное количество возможностей, таких как начальная схема базы данных, регистрация пользователя и восстановление его пароля.

Установка

Установка при помощи Composer

Если у вас ещё не установлен Composer, следуйте инструкциям в разделе установка Yii.

Если Composer установлен, вы можете установить приложение используя следующие команды:

Начало работы

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

Для производственных серверов удобно выполнять данную команду в не интерактивном режиме.

Настройте на вебсервере URL и корневые директории:

для приложения frontend директория /path/to/yii-application/frontend/web/ и URL http://yourdomain/frontend/

Структура директорий

Корневая директория содержит следующие поддиректории:

Корневая директория содержит следующие файлы:

Встроенные псевдонимы путей

Приложения

В шаблоне advanced три приложения: frontend, backend и console. Frontend это та часть приложения, которая обеспечивает взаимодействие системы с конечным пользователем проекта. Backend это административная панель, аналитика и прочая подобная функциональность. Console обычно используется для выполнения заданий по расписанию через cron, низкоуровневого управления сервером, при развёртывании приложения, работы с миграциями и ресурсами.

Конфигурации и окружения

Существует множество проблем при типичном подходе к настройке конфигурации:

Чтобы избежать дублирования, конфигурации перекрывают друг друга. Например, приложение frontend считывает конфигурацию в следующем порядке:

Параметры считываются в следующем порядке:

Значения из следующего конфигурационного файла перекрывают аналогичные значения из предыдущих конфигурационных файлов.

yii2 что такое app. Смотреть фото yii2 что такое app. Смотреть картинку yii2 что такое app. Картинка про yii2 что такое app. Фото yii2 что такое app

Настройка Composer

После того как шаблон приложения установлен, хорошо бы изменить composer.json который находится в корневой директории проекта:

Создание ссылок на frontend из backend

Часто приходится создавать ссылки из приложения backend на приложение frontend. Так как frontend может использовать собственную конфигурация менеджера URL, вам придётся продублировать её в конфигурации backend под новым именем:

После того, как это будет сделано, вы сможете получить URL, указывающий на frontend, следующим способом:

Источник

Есть два типа приложений: веб-приложения и консольные приложения. Как следует из названия, первый обрабатывает веб-запросы, в то время как последний обрабатывает запросы команд в консоли.

Конфигурация приложений

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

Конфигурация приложения определяет, как инициализировать свойства объектов приложения. Поскольку конфигурация приложения очень часто сложна, она обычно сохраняется в конфигурационных файлах, таких как web.php.

Свойства приложений

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

Необходимые свойства:

В любом приложении, вы должны сконфигурировать хотя бы по крайней мере два свойства: id и basePath

Свойство basePath часто используется, чтобы получить другие важные пути (например, путь во время выполнения). Поэтому псевдоним пути, названный @app, предопределен, чтобы представлять этот путь. Полученные пути могут тогда быть сформированы, используя этот псевдоним (например, @app/runtime, чтобы обратиться к каталогу во время выполнения).

Важные свойства:

Описанные здесь свойства должны быть настроены, так как они различаются в различных приложениях.

Эта свойство обеспечено так, чтобы вы могли определить псевдоним в условиях конфигурации приложения, а не при помощи вызова метода Yii::setAlias().

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

Во время процесса самонастройки, каждый компонент будет экземпляром. Если класс реализует компонент yii\base\BootstrapInterface, его метод bootstrap() также будет называться.

Другим практическим примером может служить конфигурация приложения для Basic Project Template, где модули debug и gii сконфигурированы как загружающиеся компоненты, когда приложение работает в среде разработки:

Конфигурация представляет собой массив, первый элемент определяет маршрут действия. Остальные элементы массива (пара ключ-значение) задают параметры, которые будут связаны с действием. Например:

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

Ключи массива этого свойства представляют идентификаторы контроллеров, в то время как значения массива представляют соответствующие имена классов контроллера или конфигурации.

Важно, чтобы полностью определенные классы контроллера были автозагружаемыми, а пространство имен классов контроллера соответствовало значению этого свойства. В противном случае вы получите ошибку «Page Not Found» при обращении к приложению.

Затем в коде, где вам нужно использовать значение размера, вы можете просто использовать следующее:

Это свойство определяет язык, код приложения записывается в. Значение по умолчанию, что означает по-английски (Соединенные Штаты Америки). Вы должны настроить это свойство, если содержание текста в коде не на английском языке.

Полезные свойства

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

События приложений

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

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

EVENT_BEFORE_REQUEST

Это событие вызывается, прежде чем приложение обработает запрос. Актуальное имя события beforeRequest.

Когда это событие срабатывает, то экземпляр приложения сформирован и инициализирован. Так что, это хорошее место, чтобы вставить свой код перехвата процесса обработки запросов через механизм событий. Например, в обработчике событий вы можете динамически установить yii\base\Application::$language событие основанное на некоторых параметров.

EVENT_AFTER_REQUEST

Это событие инициируется после того, как приложение завершит обработку запроса, но перед отправкой ответа. Актуальное имя события afterRequest. Когда это событие срабатывает, обработка запроса будет завершена, и вы можете воспользоваться этой возможностью, чтобы сделать некоторые постобработки запроса или настроить ответ.

Обратите внимание, что компонент response также вызывает некоторые события, в то время как он посылает содержимое ответа конечным пользователям. Эти события вызываются после этого события.

EVENT_BEFORE_ACTION

Это событие инициируется перед запуском каждого действия контроллера. Актуальное имя событие beforeAction.

EVENT_AFTER_ACTION

Это событие инициируется после выполнения каждого действия контроллера. Актуальное имя события afterAction.

Источник

Приложения

Info: В зависимости от контекста, когда мы говорим «приложение», это может означать как объект приложения так и приложение как прикладную систему в целом.

Конфигурации приложения #

Когда входной скрипт создаёт приложение, он загрузит конфигурацию и применит её к приложению, например:

Свойства приложений #

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

Обязательные свойства #

В любом приложении, вы должны настроить минимум два свойства: id и basePath.

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

basePath #

Свойство basePath часто используется для указания других важных путей (например, путь к директории runtime, используемой приложением). По этой причине, псевдоним пути @app предустановлен и содержит данный путь. Производные пути могут быть получены с использованием этого псевдонима пути (например, @app/runtime указывает на временную директорию runtime).

Важные свойства #

Свойства, указанные в этом подразделе, часто нуждаются в предварительной настройке т.к. они разнятся от приложения к приложению.

aliases #

Это свойство доступно таким образом, чтобы вы могли указывать псевдонимы в рамках конфигурации приложения, а не вызовов метода Yii::setAlias().

bootstrap #

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

Каждый из элементов данного свойства, может быть указан в одном из следующих форматов:

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

В процессе начальной загрузки, каждый компонент будет создан. Если класс компонента имеет интерфейс yii\base\BootstrapInterface, то также будет вызван метод bootstrap().

Еще одним практическим примером является конфигурация базового шаблона приложения, в котором модули debug и gii указаны как bootstrap компоненты, когда приложение находится в отладочном режиме.

Note: Указывание слишком большого количества компонентов в bootstrap приведет к снижению производительности приложения, потому что для каждого запроса одно и то же количество компонентов должно быть загружено. Таким образом вы должны использовать начальную загрузку разумно.

catchAll #

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

Конфигурация это массив, первый элемент которого, определяет маршрут действия. Остальные элементы в формате пара ключ-значение задают дополнительные параметры, которые должны быть переданы действию (методу контроллера actionXXX). Например,

components #

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

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

Более подробная информация приведена в разделе Компоненты приложения.

controllerMap #

Ключами данного свойства являются ID контроллеров, а значениями являются соответствующие названия классов(полное название класса с пространством имен) контроллера или конфигурация.

controllerNamespace #

Очень важно, чтобы полное имя класса контроллера могло быть использовано автозагрузкой и соответствующее пространство имен вашего контроллера соответствовало данному свойству. Иначе, Вы получите ошибку «Страница не найдена», при доступе к приложению.

В случае, если вы хотите переопределить соответствия как описано выше, вы можете настроить свойство controllerMap.

language #

Значение данного свойства определяется различными аспектами интернационализации, в том числе переводом сообщений, форматированием дат, форматированием чисел, и т. д. Например, виджет yii\jui\DatePicker использует данное свойство для определения по умолчанию языка, на котором должен быть отображен календарь и формат данных для календаря.

Более детальная информация приведена в разделе Интернационализация.

modules #

Данное свойство указывает модули, которые содержатся в приложении.

Более детальная информация приведена в разделе Модули.

Свойство указывает название приложения, которое может быть показано конечным пользователям. В отличие от свойства id, которое должно быть уникальным, значение данного свойства нужно в основном для отображения и не обязательно должно быть уникальным.

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

params #

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

Затем, когда вам нужно использовать данные значения в вашем коде, вы делаете это как представлено ниже:

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

sourceLanguage #

Более детальная информация приведена в разделе Интернационализация.

timeZone #

Данное свойство предоставляет альтернативный способ установки временной зоны в процессе работы приложения. Путем указания данного свойства, вы по существу вызываете PHP функцию date_default_timezone_set(). Например,

version #

Полезные свойства #

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

charset #

defaultRoute #

extensions #

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

layout #

layoutPath #

Вы можете настроить данное свойство как папку так и как псевдоним.

runtimePath #

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

viewPath #

vendorPath #

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

enableCoreCommands #

События приложения #

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

Использование синтаксиса on eventName детально описано в разделе Конфигурации.

Также вы можете назначить обработчики событий в процессе начальной загрузки приложения, сразу после того как приложение будет создано. Например,

EVENT_BEFORE_REQUEST #

На момент возникновения данного события, объект приложения уже создан и проинициализирован. Таким образом, это является хорошим местом для вставки вашего кода с помощью событий, для перехвата управления обработкой запроса. Например, обработчик события, может динамически подставлять язык приложения yii\base\Application::language в зависимости от некоторых параметров.

EVENT_AFTER_REQUEST #

На момент возникновения данного события, обработка запроса завершена и вы можете воспользоваться этим для произведения постобработки запроса, с целью настройки ответа.

Обратите внимание, что в компоненте response также возникают события в процессе отправки данных конечному пользователю. Эти события возникают после текущего события.

EVENT_BEFORE_ACTION #

Событие является объектом yii\base\ActionEvent. Обработчик события может устанавливать свойство yii\base\ActionEvent::isValid равным false для предотвращения выполнения действия.

EVENT_AFTER_ACTION #

Событие является объектом yii\base\ActionEvent. Через свойство yii\base\ActionEvent::result обработчик события может получить доступ и изменить значение выполнения действия контроллера.

Жизненный цикл приложения #

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

Источник

Приложения ¶

Информация: В зависимости от контекста, когда мы говорим «приложение», это может означать как объект приложения так и приложение как прикладную систему в целом.

Конфигурации приложения ¶

Когда входной скрипт создаёт приложение, он загрузит конфигурацию и применит её к приложению, например:

Свойства приложений ¶

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

Обязательные свойства ¶

В любом приложении, вы должны настроить минимум два свойства: id и basePath.

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

basePath ¶

Свойство basePath часто используется для указания других важных путей (например, путь к директории runtime, используемой приложением). По этой причине, псевдоним пути @app предустановлен и содержит данный путь. Производные пути могут быть получены с использованием этого псевдонима пути (например, @app/runtime указывает на временную директорию runtime).

Важные свойства ¶

Свойства, указанные в этом подразделе, часто нуждаются в предварительной настройке т.к. они разнятся от приложения к приложению.

aliases ¶

Это свойство доступно таким образом, чтобы вы могли указывать псевдонимы в рамках конфигурации приложения, а не вызовов метода Yii::setAlias().

bootstrap ¶

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

Каждый из элементов данного свойства, может быть указан в одном из следующих форматов:

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

В процессе начальной загрузки, каждый компонент будет создан. Если класс компонента имеет интерфейс yii\base\BootstrapInterface, то также будет вызван метод bootstrap().

Еще одним практическим примером является конфигурация базового шаблона приложения, в котором модули debug и gii указаны как bootstrap компоненты, когда приложение находится в отладочном режиме.

Примечание: Указывание слишком большого количества компонентов в bootstrap приведет к снижению производительности приложения, потому что для каждого запроса одно и то же количество компонентов должно быть загружено. Таким образом вы должны использовать начальную загрузку разумно.

catchAll ¶

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

Конфигурация это массив, первый элемент которого, определяет маршрут действия. Остальные элементы в формате пара ключ-значение задают дополнительные параметры, которые должны быть переданы действию (методу контроллера actionXXX). Например,

components ¶

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

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

Более подробная информация приведена в разделе Компоненты приложения.

controllerMap ¶

Ключами данного свойства являются ID контроллеров, а значениями являются соответствующие названия классов(полное название класса с пространством имен) контроллера или конфигурация.

controllerNamespace ¶

Очень важно, чтобы полное имя класса контроллера могло быть использовано автозагрузкой и соответствующее пространство имен вашего контроллера соответствовало данному свойству. Иначе, Вы получите ошибку «Страница не найдена», при доступе к приложению.

В случае, если вы хотите переопределить соответствия как описано выше, вы можете настроить свойство controllerMap.

language ¶

Значение данного свойства определяется различными аспектами интернационализации, в том числе переводом сообщений, форматированием дат, форматированием чисел, и т. д. Например, виджет yii\jui\DatePicker использует данное свойство для определения по умолчанию языка, на котором должен быть отображен календарь и формат данных для календаря.

Более детальная информация приведена в разделе Интернационализация.

modules ¶

Данное свойство указывает модули, которые содержатся в приложении.

Более детальная информация приведена в разделе Модули.

Свойство указывает название приложения, которое может быть показано конечным пользователям. В отличие от свойства id, которое должно быть уникальным, значение данного свойства нужно в основном для отображения и не обязательно должно быть уникальным.

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

params ¶

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

Затем, когда вам нужно использовать данные значения в вашем коде, вы делаете это как представлено ниже:

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

sourceLanguage ¶

Более детальная информация приведена в разделе Интернационализация.

timeZone ¶

Данное свойство предоставляет альтернативный способ установки временной зоны в процессе работы приложения. Путем указания данного свойства, вы по существу вызываете PHP функцию date_default_timezone_set(). Например,

version ¶

Полезные свойства ¶

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

charset ¶

defaultRoute ¶

extensions ¶

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

layout ¶

layoutPath ¶

Вы можете настроить данное свойство как папку так и как псевдоним.

runtimePath ¶

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

viewPath ¶

vendorPath ¶

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

enableCoreCommands ¶

События приложения ¶

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

Использование синтаксиса on eventName детально описано в разделе Конфигурации.

Также вы можете назначить обработчики событий в процессе начальной загрузки приложения, сразу после того как приложение будет создано. Например,

EVENT_BEFORE_REQUEST ¶

На момент возникновения данного события, объект приложения уже создан и проинициализирован. Таким образом, это является хорошим местом для вставки вашего кода с помощью событий, для перехвата управления обработкой запроса. Например, обработчик события, может динамически подставлять язык приложения yii\base\Application::$language в зависимости от некоторых параметров.

EVENT_AFTER_REQUEST ¶

На момент возникновения данного события, обработка запроса завершена и вы можете воспользоваться этим для произведения постобработки запроса, с целью настройки ответа.

Обратите внимание, что в компоненте response также возникают события в процессе отправки данных конечному пользователю. Эти события возникают после текущего события.

EVENT_BEFORE_ACTION ¶

Событие является объектом yii\base\ActionEvent. Обработчик события может устанавливать свойство yii\base\ActionEvent::$isValid равным false для предотвращения выполнения действия.

EVENT_AFTER_ACTION ¶

Событие является объектом yii\base\ActionEvent. Через свойство yii\base\ActionEvent::$result обработчик события может получить доступ и изменить значение выполнения действия контроллера.

Жизненный цикл приложения ¶

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

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *