Знайомимося із 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:

<?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, опишемо послідовність роботи нашого додатка при зверненні користувача до сторінки Контакти:

  1. Користувач запитує URL http://www.example.com/blog/index.php?r=site/contact;
  2. Для обробки запиту запускається вхідний скрипт;
  3. Екземпляр додатка створюється і налаштовується із початкових значень, вказаних в файлі конфігурації /wwwroot/blog/protected/config/main.php;
  4. Додаток передає обробку запиту певній дії контролера. Запит сторінки Контакти обробляється дією contact контролера site (методом actionContact класу /wwwroot/blog/protected/controllers/SiteController.php);
  5. Додаток створює контролер site (екземпляр класу SiteController) і виконує його;
  6. Виконується дія contact (метод actionContact() класу SiteController);
  7. Метод actionContact() виводить представлення contact. При цьому підключається файл представлення /wwwroot/blog/protected/views/site/contact.php і результат його виконання підставляється в макет /wwwroot/blog/protected/views/layouts/column1.php.

Для чого реклама?