mirror of
https://github.com/yiisoft/yii.git
synced 2026-03-06 00:04:07 +01:00
191 lines
13 KiB
Plaintext
191 lines
13 KiB
Plaintext
Приложение
|
||
==========
|
||
Приложение (application) — это контекст выполнения запроса. Основная задача приложения — предварительная обработка
|
||
запроса (request resolving) пользователя и передача его соответствующему
|
||
контроллеру для дальнейшей обработки. Другой задачей приложения является хранение параметров конфигурации
|
||
уровня приложения (application-level configuration). Поэтому приложение
|
||
также называют `фронт-контроллером`.
|
||
|
||
Приложение создается [входным скриптом](/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] — управляет клиентскими скриптами (javascripts и CSS);
|
||
|
||
- [coreMessages|CApplication::coreMessages]: [CPhpMessageSource] — предоставляет переводы системных сообщений Yii-фреймворка;
|
||
|
||
- [db|CApplication::db]: [CDbConnection] — обслуживает соединение с базой данных; обратите внимание, что
|
||
для использования компонента необходимо установить свойство [connectionString|CDbConnection::connectionString];
|
||
|
||
- [errorHandler|CApplication::errorHandler]: [CErrorHandler] — обрабатывает не пойманные ошибки и исключения PHP;
|
||
|
||
- [format|CApplication::format]: [CFormatter] - форматирует данные для их последующего отображения. Доступно с версии 1.1.0;
|
||
|
||
- [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].
|
||
|
||
<div class="revision">$Id: basics.application.txt 2488 2010-09-20 11:38:02Z mdomba $</div> |