Знайомимося із Yii
У даному розділі ми опишемо створення основи додатка, яка буде слугувати нашою відправною точкою.
Для простоти, приймемо, що коренева директорія нашого веб-сервера — /wwwroot
,
а відповідна їй URL-адреса — http://www.example.com/
.
Встановлення Yii
Спочатку ми встановимо фреймворк.
Завантажимо дистрибутив фреймворку (версії 1.1.1 або вище) з сайту
www.yiiframework.com і розпакуємо в директорію /wwwroot/yii
.
Переконаємося, що отримали директорію /wwwroot/yii/framework
.
Підказка: Фреймворк Yii може бути встановлений в будь-якому місці файлової системи, не обовʼязково в
wwwroot
. Директоріяframework
містить весь код фреймворку і є єдиною та необхідною при розгортанні додатка. Одна копія Yii може використовуватися декількома додатками.
Після встановлення Yii відкриємо вікно браузера і перейдемо за адресою
http://www.example.com/yii/requirements/index.php
.
Ми побачимо аналізатор вимог, що поставляється разом із релізом Yii.
Для блогу, крім того, що потребує сам фреймворк, для доступу до БД SQLite нам знадобляться розширення PHP pdo
та pdo_sqlite
.
Створення основи додатка
Скористаємося утилітою командного рядка yiic
, що йде в комплекті з фреймворком,
для створення основи додатка в директорії /wwwroot/blog
.
yiic
може бути використана для генерації коду, що дозволяє зменшити обсяг повторюваного коду, який набирається вручну.
Відкриємо вікно командного рядка і виконаємо наступну команду:
% /wwwroot/yii/framework/yiic webapp /wwwroot/blog Create a Web application under '/wwwroot/blog'? [Yes|No]y …
Підказка: Щоб використовувати утиліту
yiic
як показано вище, шлях до PHP повинен бути прописаний в системній змінній PATH. Якщо це не так, то ми можемо використовувати наступну команду:шлях/до/php /wwwroot/yii/framework/yiic.php webapp /wwwroot/blog
Спробуємо запустити щойно створений додаток.
Відкриємо браузер і перейдемо за адресою http://www.example.com/blog/index.php
.
Ми повинні побачити, що згенерована заготовка вже має 4 повнофункціональних сторінки: «Головна», «Про проект», «Контакти» і «Вхід».
Нижче ми коротко опишемо, що саме ми отримали.
Вхідний скрипт
У нас є файл вхідного скрипта /wwwroot/blog/index.php
:
$yii='/wwwroot/framework/yii.php'; $config=dirname(__FILE__).'/protected/config/main.php'; // видалити наступний рядок у режимі production defined('YII_DEBUG') or define('YII_DEBUG',true); require_once($yii); Yii::createWebApplication($config)->run();
Це єдиний скрипт, до якого користувачі мають прямий доступ.
Спочатку скрипт підключає файл початкового завантаження yii.php
.
Потім створює екземпляр додатка із заданими налаштуваннями і виконує додаток.
Базова директорія додатку
Також, у нас є базова директорія додатку /wwwroot/blog/protected
.
Більша частина нашого коду і даних буде зберігатися в цій директорії і повинна бути захищена від прямого доступу користувачів із веб.
Для веб-сервера Apache ми кладемо в цю директорію файл .htaccess
із наступним змістом:
deny from all
Інструкції по налаштуванню захисту директорії від прямого доступу для інших веб-серверів ви можете знайти у відповідній документації.
Послідовність роботи додатка
Щоб зрозуміти роботу Yii, опишемо послідовність роботи нашого додатка при зверненні користувача до сторінки Контакти
:
- Користувач запитує URL
http://www.example.com/blog/index.php?r=site/contact
; - Для обробки запиту запускається вхідний скрипт;
- Екземпляр додатка створюється і налаштовується із початкових значень,
вказаних в файлі конфігурації
/wwwroot/blog/protected/config/main.php
; - Додаток передає обробку запиту певній дії
контролера.
Запит сторінки
Контакти
обробляється дієюcontact
контролераsite
(методомactionContact
класу/wwwroot/blog/protected/controllers/SiteController.php
); - Додаток створює контролер
site
(екземпляр класуSiteController
) і виконує його; - Виконується дія
contact
(методactionContact()
класуSiteController
); - Метод
actionContact()
виводить представленняcontact
. При цьому підключається файл представлення/wwwroot/blog/protected/views/site/contact.php
і результат його виконання підставляється в макет/wwwroot/blog/protected/views/layouts/column1.php
.