Знакомимся с 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]
<?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`. Затем создает экземпляр
[приложения](/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`.