Создаем CRUD-приложение с помощью Yii за считанные минуты

Yii – это высокопроизводительный фреймворк, который работает быстро, безопасно и хорошо подходит для приложений Web 2.0.

Он поддерживает приоритет соглашений над конфигурацией, что означает, что если вы следуете руководствам по работе с фреймворком, вы, в конечном итоге, напишите намного меньше кода, чем если бы вы не следовали им (а меньшее количество кода содержит меньшее количество ошибок).

К тому же, фреймворк предлагает много удобных, уже готовых функций, таких как: скаффолдинг, объекты доступа к данным, тематизация, контроль доступа, кэширование и многое другое. В этой статье я расскажу основы того, как используя Yii, создать CRUD систему.

Приступим

Я исхожу из того, что у вас уже установлены Apache, PHP (5.1 или выше) и MySQL, поэтому первым нашим шагом будет загрузка файлов фреймворка. Зайдите на официальный сайт Yii и скачайте последнюю стабильную версию (на момент написания статьи – версия 1.1.13).

Распакуйте ZIP-архив, чтобы получить папку yii-1.1.13.e9e4a0 (идентификатор версии может отличаться в зависимости от версии, которую вы загрузили), переименуйте папку в yii, затем поместите ее в ваш корневой каталог, доступный из сети.

В моем случае, это C:wampwww таким образом, путь к файлам фреймворка будет следующим: C:wampwwwyii.

Я буду ссылаться на него как на протяжении всей статьи, поэтому вы можете легко следовать всем шагам, даже если ваши настройки отличаются от моих.

Затем мы должны проверить, какие функции Yii будут поддерживаться нашей системой. Откройте ссылку http://localhost/yii/requirements в вашем браузере, чтобы увидеть детали требований фреймворка.

Поскольку мы будем работать с базой данных MySQL, расширение MYSQL PDO должно быть разрешено.

Приступим

Мы хотели быстро проверить требования Yii, и поэтому поместили файлы в доступный каталог, но рекомендуется хранить файлы Yii вне сетевого каталога. После проверки можете свободно переместить файлы Yii куда угодно.

Двигаемся дальше

Каждое веб-приложение имеет свою структуру каталога, и Yii приложения также нуждаются в поддержке иерархичной структуры внутри сетевого каталога.

Чтобы создать каркас приложения с подходящей структурой каталога, вы можете использовать Yii инструмент yiic, работающий из командной строки. Перейдите в сетевой каталог и введите следующее:

<YiiRoot>frameworkyiic webapp yiitest

Эта команда создаст скелет приложения под названием yiitest с минимальным набором необходимых файлов. Внутри вы найдете файл index.php, который служит в качестве скрипта входа, он принимает пользовательские запросы и решает, какой контроллер должен обработать запрос.

Фреймворк Yii основан на принципах MVC и ООП, поэтому вы должны разбираться в этих темах. Если вы не знакомы с MVC, почитайте серию статей The MVC Pattern and PHP, которая предлагает хорошее введение в эту тему.

В Yii URL-адрес выглядит как http://localhost/yiitest/index.php?r=controllerID/actionID. Например, в блоговой системе URL может быть следующим: http://localhost/yiitest/index.php?r=post/create. post – это идентификатор контроллера, а create – идентификатор действия.

Основываясь на идентификаторах, скрипт входа решает, какой контроллер и метод вызвать.

Контроллер, имеющий идентификатор post, должен быть назван PostController (идентификатор получается путем отсечения суффикса Controller от имени класса и изменением первой буквы на строчную).

Идентификатор действия – это идентификатор метода, представленного в контроллере подобным образом; внутри PostController должен быть метод под названием actionCreate().

Может быть несколько представлений, ассоциированных с одним контроллером, поэтому мы храним файлы представлений внутри папок protected/views/controllerID.

Мы можем создать файл представления для нашего контроллера под названием create.php в описанном выше каталоге, и затем представить его пользователям, просто написав следующий код в actionCreate():

public function actionCreate()
{
    $this->render('create');
}

Также, если нужно, можно передать дополнительные данные в представление. Это делается следующим образом:

$this->render('create', array('data' => $data_item));

Внутри файла представления мы можем получить доступ к данным через переменную $data.

Представление также имеет доступ к переменной $this, которая указывает на экземпляр контроллера, воспроизводящего представление.

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

'urlManager'=>array( 
    'urlFormat'=>'path',
    'rules'=>array(
        '<controller:w+>/<id:d+>'=>'<controller>/view',
        '<controller:w+>/<action:w+>/<id:d+>'=>'<controller>/<action>',
        '<controller:w+>/<action:w+>'=>'<controller>/<action>',
    )

Тогда URL-адреса будут выглядеть следующим образом: http://localhost/yiitest/controllerID/actionID.

Разработка CRUD приложения

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

Шаг 1

Создадим базу данных MySQL под названием yiitest и внутри нее создадим таблицу posts. Таблица будет иметь только три столбца: идентификатор (id), название (title) и контент (content).

CREATE TABLE posts (
    id INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT,
    title VARCHAR(100),
    content TEXT
)

Откройте файл конфигурации вашего приложения (protected/config/main.php) и раскомментируйте следующие строки:

'db'=>array(
'connectionString' => 'mysql:host=localhost;dbname=testdrive,
'emulatePrepare' => true,
'username' => 'root',
'password' => '',
'charset' => 'utf8',
)

Замените testdrive на имя вашей базы данных, то есть, yiitest. Также вы должны обеспечить полномочия, необходимые Yii для подключения.

Шаг 2

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

Например, класс Post – это модель для таблицы сообщений. Объект этого класса представляет собой строку из таблицы posts и имеет атрибуты для отражения значений столбцов.

Для того чтобы быстро генерировать модель, мы будем использовать веб-инструмент Yii под названием gii. Этот инструмент может быть использован для генерации моделей, контроллеров и форм для CRUD операций.

Чтобы использовать gii в вашем проекте, найдите следующие строки в файле конфигурации вашего проекта, раскомментируйте их добавьте пароль.

'gii'=>array(
'class'=>'system.gii.GiiModule',
'password'=>your password to access gii, 
'ipFilters'=>array('127.0.0.1','::1'),
)

Затем обратитесь к gii с помощью следующего адреса: http://localhost/yiitest/index.php?r=gii. Если вы используете дружественные пользователю URL-адреса, адрес будет такой: http://localhost/yiitest/gii.

Кликнете на Model Generator. gii попросит вас ввести имя таблицы; введите posts для имени таблицы, а для имени модели используйте Post. Затем кликнете Generate для создания модели.

Разработка CRUD приложения

Проверьте папку protected/models, и вы найдете там файл Post.php.

Шаг 3

Теперь кликнете на CRUD Generator. Введите в качестве имени модели Post. Идентификатор контроллера автоматически заполнится как post.

Это означает, что новый контроллер будет сгенерирован под именем PostController.php.

Кликнете на Generate. Сгенерируется контроллер, а также несколько файлов представления с формами, необходимыми для CRUD операций.

Разработка CRUD приложения - 2

Теперь у вас есть совершенно новое CRUD приложение! Кликнете на ссылку try it now, чтобы протестировать его. Для управления сообщениями вам нужно будет войти как admin/admin.

Для того, чтобы создать новое сообщение, вам нужно обратиться по адресу http://localhost/yiitest/post/create, а для обновления определенного сообщения просто откройте в браузере ссылку http://localhost/yiitest/post/update/postID.

Аналогично вы можете составить список всех сообщений и удалить все или некоторые из них.

Заключение

Yii – это очень мощный фреймворк, если речь заходит о разработке проектов поколения Web 2.0. Фактически, вы только что увидели, как легко создать полностью функционирующую CRUD систему всего за несколько минут!

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

РедакцияПеревод статьи «Build a CRUD App with Yii in Minutes»