Files
yii/docs/guide/uk/basics.application.txt
2010-07-05 01:36:55 +00:00

193 lines
12 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) — це контекст виконання запиту. Основне завдання додатка — попередня обробка
запиту (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>