mirror of
https://github.com/yiisoft/yii.git
synced 2026-03-11 02:26:56 +01:00
191 lines
12 KiB
Plaintext
191 lines
12 KiB
Plaintext
Додаток
|
||
=======
|
||
|
||
Обʼєкт додатку (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] в [конфігурації додатку](#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] - форматує дані для їх подальшого відображення;
|
||
|
||
- [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 3251 2011-06-01 00:24:06Z qiang.xue $</div> |