0 follower

Приложение

Объект приложения (application) инкапсулирует контекст выполнения запроса. Основная задача приложения — собрать информацию о запросе и передать её соответствующему контроллеру для дальнейшей обработки. Также приложение является централизованным хранилищем конфигурации приложения. Именно поэтому объект приложения также называют фронт-контроллером.

Объект приложения создаётся входным скриптом как одиночка (singleton). Экземпляр приложения доступен из любой его точки посредством Yii::app().

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

По умолчанию объект приложения — это экземпляр класса CWebApplication, который может быть настроен с использованием конфигурационного файла (или массива). Необходимые значения свойств устанавливаются в момент создания экземпляра приложения. Альтернативный путь настройки приложения — расширение класса CWebApplication.

Конфигурация — это массив пар ключ-значение, где каждый ключ представляет собой имя свойства экземпляра приложения, а значение — начальное значение соответствующего свойства. Например, следующая конфигурация устанавливает значения свойств приложения name и defaultController:

array(
    'name'=>'Yii Framework',
    'defaultController'=>'site',
)

Стоит отметить, что приложение, как и большинство классов Yii, является компонентом. Это означает что:

  • Вы не можете присваивать значения не объявленным в классе свойствам.
  • Приложение поддерживает свойства, объявленные через геттеры и сеттеры, то есть можно сконфигурировать свойство, заданное setImport следующим образом:
array(
    'import'=>array(
        'application.components.*',
    ),
)

Обычно конфигурация хранится в отдельном PHP-скрипте (например, protected/config/main.php). Скрипт возвращает конфигурационный массив:

return array(…);

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

$app=Yii::createWebApplication($configFile);

Подсказка: Если конфигурация очень громоздкая, можно разделить ее на несколько файлов, каждый из которых возвращает часть конфигурационного массива. Затем в основном конфигурационном файле необходимо подключить эти файлы, используя include(), и соединить массивы-части в единый конфигурационный массив.

2. Базовая директория приложения

Базовой директорией приложения называется корневая директория, содержащая все основные, с точки зрения безопасности, PHP-скрипты и данные. По умолчанию это поддиректория protected, находящаяся в директории, содержащей входной скрипт. Изменить её местоположение можно, установив свойство basePath в конфигурации приложения.

Содержимое базовой директории должно быть закрыто от доступа из веб. При использовании веб-сервера Apache HTTP server это можно сделать путем добавления в базовую директорию файла .htaccess следующего содержания:

deny from all

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

Функциональность объекта приложения может быть легко модифицирована и расширена благодаря компонентной архитектуре. Приложение управляет набором компонентов, каждый из которых реализует набор определённых возможностей. Например, приложение производит предварительную обработку запроса пользователя, используя компоненты 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.

4. Ключевые компоненты приложения

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 — управляет темами оформления.

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

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

  1. Предварительная инициализация приложения через CApplication::preinit().

  2. Инициализация обработчика ошибок.

  3. Регистрация компонентов ядра.

  4. Загрузка конфигурации приложения.

  5. Инициализация приложения CApplication::init():

    • регистрация поведений приложения;
    • загрузка статических компонентов приложения.
  6. Вызов события onBeginRequest.

  7. Обработка запроса:

    • сбор информации о запросе;
    • создание контроллера;
    • запуск контроллера.
  8. Вызов события onEndRequest.

Found a typo or you think this page needs improvement?
Edit it on github !