Объект приложения (application) инкапсулирует контекст выполнения запроса.
Основная задача приложения — собрать информацию о запросе и передать
её соответствующему контроллеру для дальнейшей обработки. Также приложение
является централизованным хранилищем конфигурации приложения. Именно поэтому объект
приложения также называют фронт-контроллером
.
Объект приложения создаётся входным скриптом как одиночка (singleton)
.
Экземпляр приложения доступен из любой его точки посредством Yii::app().
По умолчанию объект приложения — это экземпляр класса CWebApplication, который может быть настроен с использованием конфигурационного файла (или массива). Необходимые значения свойств устанавливаются в момент создания экземпляра приложения. Альтернативный путь настройки приложения — расширение класса CWebApplication.
Конфигурация — это массив пар ключ-значение, где каждый ключ представляет собой имя свойства экземпляра приложения, а значение — начальное значение соответствующего свойства. Например, следующая конфигурация устанавливает значения свойств приложения name и defaultController:
array(
'name'=>'Yii Framework',
'defaultController'=>'site',
)
Стоит отметить, что приложение, как и большинство классов Yii, является компонентом. Это означает что:
array(
'import'=>array(
'application.components.*',
),
)
Обычно конфигурация хранится в отдельном PHP-скрипте
(например, protected/config/main.php
). Скрипт возвращает конфигурационный массив:
return array(…);
Чтобы воспользоваться конфигурацией, необходимо передать имя конфигурационного файла в качестве аргумента конструктору приложения или методу Yii::createWebApplication(), как показано ниже. Обычно это делается во входном скрипте:
$app=Yii::createWebApplication($configFile);
Подсказка: Если конфигурация очень громоздкая, можно разделить ее на несколько файлов, каждый из которых возвращает часть конфигурационного массива. Затем в основном конфигурационном файле необходимо подключить эти файлы, используя
include()
, и соединить массивы-части в единый конфигурационный массив.
Базовой директорией приложения называется корневая директория, содержащая все основные, с точки
зрения безопасности, PHP-скрипты и данные. По умолчанию это поддиректория protected
, находящаяся
в директории, содержащей входной скрипт. Изменить её местоположение можно, установив свойство
basePath в конфигурации приложения.
Содержимое базовой директории должно быть закрыто от доступа из веб.
При использовании веб-сервера Apache HTTP server
это можно сделать путем добавления в базовую директорию файла .htaccess
следующего содержания:
deny from all
Функциональность объекта приложения может быть легко модифицирована и расширена благодаря компонентной архитектуре. Приложение управляет набором компонентов, каждый из которых реализует набор определённых возможностей. Например, приложение производит предварительную обработку запроса пользователя, используя компоненты CUrlManager и CHttpRequest.
Изменяя значение свойства components, можно настроить классы и значения свойств любого компонента, используемого приложением. Например, можно сконфигурировать компонент CMemCache так, чтобы он использовал несколько memcache-серверов для кэширования:
array(
…
'components'=>array(
…
'cache'=>array(
'class'=>'CMemCache',
'servers'=>array(
array('host'=>'server1', 'port'=>11211, 'weight'=>60),
array('host'=>'server2', 'port'=>11211, 'weight'=>40),
),
),
),
)
В данном примере мы добавили элемент cache
к массиву components
.
Элемент cache
указывает, что классом компонента является CMemCache, а также устанавливает его свойство
servers.
Для доступа к компоненту приложения используйте Yii::app()->ComponentID
, где
ComponentID
— это идентификатор компонента (например, Yii::app()->cache
).
Компонент может быть деактивирован путем установки параметра enabled
в его конфигурации равным false.
При обращении к деактивированному компоненту будет возвращен null.
Подсказка: По умолчанию компоненты приложения создаются по требованию. Это означает, что экземпляр компонента может быть не создан вообще в случае, если это не требуется при обработке пользовательского запроса. В результате общая производительность приложения может не пострадать, даже если в конфигурации указано множество компонентов.
При необходимости обязательного создания экземпляров компонентов (например, CLogRouter) вне зависимости от того, используются они или нет, укажите их идентификаторы в значении конфигурационного свойства preload.
Yii предопределяет набор компонентов ядра, которые предоставляют возможности, необходимые для большинства веб-приложений. Например, компонент request используется для сбора информации о запросе пользователя и предоставляет различную информацию, такую как URL и cookies. Задавая свойства компонентов, можно изменять стандартное поведение Yii практически как угодно.
Далее перечислены ключевые компоненты, предопределенные классом CWebApplication:
assetManager: CAssetManager — управляет публикацией файлов ресурсов (asset files);
authManager: CAuthManager — контролирует доступ на основе ролей (RBAC);
cache: CCache — предоставляет возможности кэширования данных; учтите, что вы должны указать используемый класс (например, CMemCache, CDbCache), иначе при обращении к компоненту будет возвращен null;
clientScript: CClientScript — управляет клиентскими скриптами (JavaScript и CSS);
coreMessages: CPhpMessageSource — предоставляет переводы системных сообщений Yii-фреймворка;
db: CDbConnection — обслуживает соединение с базой данных; обратите внимание, что для использования компонента необходимо установить свойство connectionString;
errorHandler: CErrorHandler — обрабатывает не пойманные ошибки и исключения PHP;
format: CFormatter — форматирует данные для их последующего отображения.
messages: CPhpMessageSource — предоставляет переводы сообщений, используемых в Yii-приложении;
request: CHttpRequest — содержит информацию о пользовательском запросе;
securityManager: CSecurityManager — предоставляет функции, связанные с безопасностью (например, хеширование, шифрование);
session: CHttpSession — обеспечивает функциональность, связанную с сессиями;
statePersister: CStatePersister — предоставляет метод для сохранения глобального состояния;
urlManager: CUrlManager — предоставляет функции парсинга и формирования URL;
user: CWebUser — предоставляет идентификационную информацию текущего пользователя;
themeManager: CThemeManager — управляет темами оформления.
Жизненный цикл приложения при обработке пользовательского запроса выглядит следующим образом:
Предварительная инициализация приложения через CApplication::preinit().
Инициализация обработчика ошибок.
Регистрация компонентов ядра.
Загрузка конфигурации приложения.
Инициализация приложения CApplication::init():
Вызов события onBeginRequest.
Обработка запроса:
Вызов события onEndRequest.
Found a typo or you think this page needs improvement?
Edit it on github !
Signup or Login in order to comment.