Files
yii/docs/guide/ru/basics.application.txt
2012-11-24 19:45:12 +04:00

191 lines
13 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
Приложение
==========
Объект приложения (application) инкапсулирует контекст выполнения запроса.
Основная задача приложения — собрать информацию о запросе и передать
её соответствующему контроллеру для дальнейшей обработки. Также приложение
является централизованным хранилищем конфигурации приложения. Именно поэтому объект
приложения также называют `фронт-контроллером`.
Объект приложения создаётся [входным скриптом](/doc/guide/basics.entry) как `одиночка (singleton)`.
Экземпляр приложения доступен из любой его точки посредством [Yii::app()|YiiBase::app].
Конфигурация приложения
-----------------------
По умолчанию объект приложения — это экземпляр класса [CWebApplication], который
может быть настроен с использованием конфигурационного файла (или массива).
Необходимые значения свойств устанавливаются в момент создания экземпляра приложения.
Альтернативный путь настройки приложения — расширение класса [CWebApplication].
Конфигурация — это массив пар ключ-значение, где каждый ключ представляет собой
имя свойства экземпляра приложения, а значение — начальное значение соответствующего свойства.
Например, следующая конфигурация устанавливает значения свойств приложения
[name|CApplication::name] и [defaultController|CWebApplication::defaultController]:
~~~
[php]
array(
'name'=>'Yii Framework',
'defaultController'=>'site',
)
~~~
Обычно конфигурация хранится в отдельном PHP-скрипте
(например, `protected/config/main.php`). Скрипт возвращает конфигурационный массив:
~~~
[php]
return array(…);
~~~
Чтобы воспользоваться конфигурацией, необходимо передать имя конфигурационного
файла в качестве аргумента конструктору приложения или методу
[Yii::createWebApplication()], как показано ниже.
Обычно это делается во [входном скрипте](/doc/guide/basics.entry):
~~~
[php]
$app=Yii::createWebApplication($configFile);
~~~
> Tip|Подсказка: Если конфигурация очень громоздкая, можно разделить ее на несколько файлов,
каждый из которых возвращает часть конфигурационного массива. Затем в основном конфигурационном
файле необходимо подключить эти файлы, используя `include()`, и соединить массивы-части в единый
конфигурационный массив.
Базовая директория приложения
-----------------------------
Базовой директорией приложения называется корневая директория, содержащая все основные, с точки
зрения безопасности, PHP-скрипты и данные. По умолчанию это поддиректория `protected`, находящаяся
в директории, содержащей входной скрипт. Изменить её местоположение можно, установив свойство
[basePath|CWebApplication::basePath] в [конфигурации приложения](/doc/guide/basics.application#application-configuration).
Содержимое базовой директории должно быть закрыто от доступа из веб.
При использовании веб-сервера [Apache HTTP server](http://httpd.apache.org/)
это можно сделать путем добавления в базовую директорию файла `.htaccess` следующего содержания:
~~~
deny from all
~~~
Компоненты приложения
---------------------
Функциональность объекта приложения может быть легко модифицирована и расширена благодаря компонентной архитектуре.
Приложение управляет набором компонентов, каждый из которых имеет специфические возможности.
Например, приложение производит предварительную обработку запроса пользователя, используя компоненты [CUrlManager] и [CHttpRequest].
Изменяя значение свойства [components|CApplication::components], можно настроить классы и значения свойств
любого компонента, используемого приложением. Например, можно сконфигурировать компонент [CMemCache] так, чтобы
он использовал несколько memcache-серверов для кэширования:
~~~
[php]
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.
> Tip|Подсказка: По умолчанию компоненты приложения создаются по требованию.
Это означает, что экземпляр компонента может быть не создан вообще в случае,
если это не требуется при обработке пользовательского запроса. В результате общая
производительность приложения может не пострадать, даже если в конфигурации
указано множество компонентов.
При необходимости обязательного создания экземпляров компонентов (например, [CLogRouter])
вне зависимости от того, используются они или нет, укажите их идентификаторы в
значении конфигурационного свойства [preload|CApplication::preload].
Ключевые компоненты приложения
------------------------------
Yii предопределяет набор компонентов ядра, которые предоставляют возможности,
необходимые для большинства веб-приложений. Например, компонент [request|CWebApplication::request]
используется для сбора информации о запросе пользователя и предоставляет
различную информацию, такую как URL и cookies. Задавая свойства компонентов,
можно изменять стандартное поведение Yii практически как угодно.
Далее перечислены ключевые компоненты, предопределенные классом [CWebApplication]:
- [assetManager|CWebApplication::assetManager]: [CAssetManager] — управляет публикацией файлов ресурсов (asset files);
- [authManager|CWebApplication::authManager]: [CAuthManager] — контролирует доступ на основе ролей (RBAC);
- [cache|CApplication::cache]: [CCache] — предоставляет возможности кэширования данных; учтите, что вы
должны указать используемый класс (например, [CMemCache], [CDbCache]), иначе при обращении к компоненту будет возвращен null;
- [clientScript|CWebApplication::clientScript]: [CClientScript] — управляет клиентскими скриптами (JavaScript и CSS);
- [coreMessages|CApplication::coreMessages]: [CPhpMessageSource] — предоставляет переводы системных сообщений Yii-фреймворка;
- [db|CApplication::db]: [CDbConnection] — обслуживает соединение с базой данных; обратите внимание, что
для использования компонента необходимо установить свойство [connectionString|CDbConnection::connectionString];
- [errorHandler|CApplication::errorHandler]: [CErrorHandler] — обрабатывает не пойманные ошибки и исключения PHP;
- [format|CApplication::format]: [CFormatter] — форматирует данные для их последующего отображения.
- [messages|CApplication::messages]: [CPhpMessageSource] — предоставляет переводы сообщений, используемых в Yii-приложении;
- [request|CWebApplication::request]: [CHttpRequest] — содержит информацию о пользовательском запросе;
- [securityManager|CApplication::securityManager]: [CSecurityManager] — предоставляет функции,
связанные с безопасностью (например, хеширование, шифрование);
- [session|CWebApplication::session]: [CHttpSession] — обеспечивает функциональность, связанную с сессиями;
- [statePersister|CApplication::statePersister]: [CStatePersister] — предоставляет метод для сохранения
глобального состояния;
- [urlManager|CWebApplication::urlManager]: [CUrlManager] — предоставляет функции парсинга и формирования URL;
- [user|CWebApplication::user]: [CWebUser] — предоставляет идентификационную информацию текущего пользователя;
- [themeManager|CWebApplication::themeManager]: [CThemeManager] — управляет темами оформления.
Жизненный цикл приложения
-------------------------
Жизненный цикл приложения при обработке пользовательского запроса выглядит следующим образом:
0. Предварительная инициализация приложения через [CApplication::preinit()].
1. Инициализация автозагрузчика классов и обработчика ошибок.
2. Регистрация компонентов ядра.
3. Загрузка конфигурации приложения.
4. Инициализация приложения [CApplication::init()]:
- регистрация поведений приложения;
- загрузка статических компонентов приложения.
5. Вызов события [onBeginRequest|CApplication::onBeginRequest].
6. Обработка запроса:
- сбор информации о запросе;
- создание контроллера;
- запуск контроллера.
7. Вызов события [onEndRequest|CApplication::onEndRequest].