Знакомимся с Yii ================ В данном разделе мы опишем создание основы приложения, которая будет служить нашей отправной точкой. Для простоты, примем, что корневая директория нашего веб-сервера — `/wwwroot`, а соответствующий ей URL-адрес — `http://www.example.com/`. Установка Yii ------------- Сначала мы установим фреймворк. Скачаем дистрибутив фреймворка (версии 1.1.1 или выше) с сайта [www.yiiframework.com](http://www.yiiframework.com/download) и распакуем в директорию `/wwwroot/yii`. Убедимся, что получили директорию `/wwwroot/yii/framework`. > Tip|Подсказка: Фреймворк 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 … ~~~ > Tip|Подсказка: Чтобы использовать утилиту `yiic` как показано выше, путь к > PHP должен быть прописан в системной переменной PATH. Если это не так, то мы можем > использовать следующую команду: > >~~~ > путь/к/php /wwwroot/yii/framework/yiic.php webapp /wwwroot/blog >~~~ Попробуем запустить только что созданное приложение. Откроем браузер и перейдем по адресу `http://www.example.com/blog/index.php`. Мы должны увидеть, что сгенерированная заготовка уже имеет 4 полнофункциональных страницы: «Главная», «О проекте», «Контакты» и «Вход». Ниже мы кратко опишем, что именно мы получили. ###Входной скрипт У нас есть файл [входного скрипта](/doc/guide/ru/basics.entry) `/wwwroot/blog/index.php`: ~~~ [php] run(); ~~~ Это единственный скрипт, к которому пользователи имеют прямой доступ. Сначала скрипт подключает файл начальной загрузки `yii.php`. Затем создает экземпляр [приложения](/doc/guide/ru/basics.application) с заданными настройками и выполняет приложение. ###Базовая директория приложения Также, у нас есть [базовая директория приложения](/doc/guide/ru/basics.application#application-base-directory) `/wwwroot/blog/protected`. Большая часть нашего кода и данных будет храниться в этой директории и должна быть защищена от прямого доступа пользователей из веб. Для [веб-сервера Apache](http://httpd.apache.org/) мы помещаем в эту директорию файл `.htaccess` со следующим содержанием: ~~~ deny from all ~~~ Инструкции по настройке защиты директории от прямого доступа для других веб-серверов вы можете найти в соответствующей документации. Последовательность работы приложения ------------------------------------ Чтобы понять работу Yii, опишем последовательность работы нашего приложения при обращении пользователя к странице `Контакты`: 0. Пользователь запрашивает URL `http://www.example.com/blog/index.php?r=site/contact`; 1. Для обработки запроса запускается [входной скрипт](/doc/guide/ru/basics.entry); 2. С определенными в файле конфигурации `/wwwroot/blog/protected/config/main.php` начальными значениями создаётся экземпляр [приложения](/doc/guide/ru/basics.application); 3. Приложение передаёт обработку запроса определённому [действию](/doc/guide/ru/basics.controller#action) [контроллера](/doc/guide/ru/basics.controller). Запрос страницы `Контакты` обрабатывается действием `contact` контроллера `site` (методом `actionContact` класса `/wwwroot/blog/protected/controllers/SiteController.php`); 4. Приложение создает контроллер `site` (экземпляр класса `SiteController`) и выполняет его; 5. Выполняется действие `contact` (метод `actionContact()` класса `SiteController`); 6. Метод `actionContact()` выводит [представление](/doc/guide/ru/basics.view) `contact`. При этом подключается файл представления `/wwwroot/blog/protected/views/site/contact.php` и результат его выполнения подставляется в [макет](/doc/guide/ru/basics.view#layout) `/wwwroot/blog/protected/views/layouts/column1.php`.