mirror of
https://github.com/yiisoft/yii.git
synced 2026-03-05 15:54:07 +01:00
193 lines
12 KiB
Plaintext
193 lines
12 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] в [конфігурації додатка](#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 визначає набір ключових (core) компонентів, що надають можливості,
|
||
необхідні для більшості веб-додатків. Наприклад, компонент [request|CWebApplication::request]
|
||
використовується для попередньої обробки (resolve) запитів користувача й надання
|
||
різної інформації, такої як 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()]:
|
||
- реєстрація поведінок(behaviors) додатка;
|
||
- завантаження статичних компонентів додатка;
|
||
|
||
5. Виклик події [onBeginRequest|CApplication::onBeginRequest].
|
||
|
||
6. Обробка запиту:
|
||
- розбір запиту;
|
||
- створення контролера;
|
||
- запуск контролера на виконання;
|
||
|
||
7. Виклик події [onEndRequest|CApplication::onEndRequest].
|
||
|
||
<div class="revision">$Id: basics.application.txt 1601 2009-12-18 04:31:19Z qiang.xue $</div>
|
||
|