Site icon 8HOST.COM

PHP-фреймворк Yii: начало работы

Что такое Yii?

Yii (акроним «Yes, it is!») – это высокопроизводительный объектно-ориентированный PHP-фреймворк, позволяющий быстро собрать веб-приложение. Yii берет на себя основные (и самые скучные) задачи кодирования, благодаря чему разработчик может сосредоточиться на уникальности приложения. Основанный на парадигме MVC, этот PHP-фреймворк разделяет логику и представление и имеет довольно много функций для повышения безопасности.

Примечание: предполагается, что пользователь уже знаком с предыдущим руководством серии, в котором показано, как установить Yii и создать первое приложение. Кроме того, в нем можно найти полезную информацию о чистых URL-ах и подключении к приложению БД MySQL.

В данном руководстве для создания модели данных используются некоторые предоставляемые Yii инструменты генерации кода. Также оно охватывает процессы создания кода для операций CRUD и работы типичного приложения Yii. Но сначала нужно создать таблицу в подключенной ранее БД (для примера в данном руководстве эта таблица будет содержать новости).

Напомним, база данных, созданная в предыдущем руководстве, называется db_tutorial. Откройте командную строку и создайте в этой БД таблицу по имени news, которая содержит 3 столбца (id, title и body). Для этого используйте команду:

CREATE TABLE news (id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
title VARCHAR(256),
body TEXT);

Не заполняйте ее; далее будет показано, как Yii может сам заполнять таблицы.

Модель

Операции CRUD (create, read, update, delete) – одни из наиболее распространенных задач, которые выполняет веб-приложение. Создание, чтение, обновление и удаление информации из базы данных – очень важные процессы и, как правило, разработчику необходимо самостоятельно писать все функции, которые выполняют эти задачи. Но в Yii все намного проще. Базовый код CRUD можно создать автоматически при помощи генератора кода Gii. Итак, давайте рассмотрим этот инструмент подробнее.

Для начала Gii нужно включить. В файле main.php, который находится в каталоге protected/config, найдите следующий блок кода и раскомментируйте его:

/*
'gii'=>array(
'class'=>'system.gii.GiiModule',
'password'=>'Enter Your Password Here',
// If removed, Gii defaults to localhost only. Edit carefully to taste.
'ipFilters'=>array('127.0.0.1','::1'),
),
*/

Удалите комментарии и укажите пароль для доступа к Gii в браузере. Далее нужно изменить параметр ipFilters (в зависимости от местонахождения установки приложения). По умолчанию Gii доступен только с локального хоста, потому он ен будет работать, если сервер удаленный.

Потому на время разработки нужно изменить значение параметра на false, а затем вернуть более безопасное стандартное значение.

'ipFilters'=>false,

Кроме того, можно задать определенный IP-адрес, с которого можно подключаться. Сохраните файл и откройте браузер. Если вы выполнили раздел предыдущего руководства о чистых URL-адресах, перейдите:

http://example.com/mysite/gii

В противном случае откройте:

http://example.com/mysite/index.php?r=gii

При этом будет запрошен только что установленный пароль, после чего на экране появятся параметры генерации кода. Но прежде чем приступить к созданию кода CRUD, нужно создать класс модели для таблицы news. Итак, нажмите Model generator и следуйте дальнейшим указаниям программы. В целом, все, что нужно сделать – это указать имя таблицы в поле Table Name и нажать Preview, чтобы просмотреть код, а затем нажать Generate.

При возникновении ошибки вроде «Unable to write the file» убедитесь, что веб-сервер имеет право на запись в папке protected/models. Чтобы передать веб-серверу такие права, нужно сначала сделать группу www-data владельцем папки protected/models, запустив следующую команду (в root-каталоге приложения):

chown root:www-data protected/models

Теперь папка принадлежит пользователю root и папке www-data. Обратите внимание: Apache работает на сайте в качестве пользователя www-data, который также входит в группу www-data. Теперь передайте группе www-data право на запись в папке:

chmod 775 protected/models

Операции CRUD

Итак, теперь класс модели готов к взаимодействию с таблицей News. Приступайте к генерированию кода для выполнения операций CRUD в этой таблице. Откройте предыдущий URL (mysite/gii) и выберите Crud generator. В поле Model class укажите имя только что созданной модели (News), а затем нажмите Preview и Generate. Опять же, не забудьте убедиться, что веб-сервер имеет право на запись в папках protected/controllers и protected/views; при необходимости повторите описанный выше процесс, чтобы передать ему эти права. В противном случае снова возникнет ошибка.

После создания кода CRUD должно появиться сообщение об успешном выполнении задачи со ссылкой для просмотра, которая откроет страницу, содержащую записи таблицы news. Сейчас эта страница пуста, поскольку в таблице пока что нет ни одной записи. Однако справа можно найти меню со ссылками для создания и управления записями (в данном случае – новостями). Можете попробовать выполнить все эти операции: создать, прочесть, отредактировать и удалить запись. В разделе Manage News можно даже найти функции поиска, сортировки и фильтрации контента – и все это фреймворк предоставляет просто «из коробки». Кроме того, Gii позволяет генерировать контроллеры и формы, но, к сожалению, эта тема не охвачена данным руководством.

Последовательность работы приложения

Как видите, генерировать код CRUD для управления данными приложения очень просто. Теперь рассмотрим маршрутизацию запросов Yii. Как говорилось ранее, Yii использует шаблон проектирования «модель-представление-контроллер» (MVC), что позволяет надежно отделить логику от представления. Кроме того, фреймворк использует фронт-контроллер (или контроллер входа, англ.front-controller) под названием Application, который собирает информацию о запросе и направляет его для обработки в соответствующий контроллер. Чтобы разобраться в том, как это работает, рассмотрим следующий пример.

Учитывая, что используется стандартная структура URL-а, предположим, пользователь создает запрос http://example.com/mysite/index.php?r=news/view&id=1 (при использовании чистых URL-ов это http://example.com/mysite/news/1).

Сценарий начальной загрузки index.php обрабатывает фронт-контроллер Application, который с помощью компонента urlManager определяет контроллер, его поведение (в данном случае это news, которые находятся в классе NewsController), и представление. Application создает экземпляр запрашиваемого контроллера, который затем выполняет соответствующее действие (в данном случае actionView). В свою очередь, поведение читает модель News с номером 1 и выводит ее в представление с именем show (которое встраивается в макет), что и видит в браузере пользователь.

Как видите, Yii не делает ничего необычного в маршрутизации запросов пользователей.

Примечание: по этой ссылке можно найти полезные диаграммы и более подробную информацию о последовательности работы приложения Yii.

Заключение

Конечно, в рамках одного руководства невозможно рассмотреть все возможности Yii; данная статья охватывает некоторые из самых полезных и удобных функций фреймворка. Как видите, Yii может существенно облегчить работу при помощи инструментов генерирования кода.