Краткий обзор php - фреймворка Yii.
С недавним времён мне
захотелось научиться писать качественный
ООП — код. Для этих целей в сети существует
масса фреймворков и библиотек, однако
некоторое время «пошарив» в сети, мой
выбор пал на Фреймворк Yii — детище
одного человека Qiang Xue. Фреймворк очень
молод, первая версия вышла 1 января 2008
года. При выборе я руководствовался
следующими требованиями:
- MVC — архитектура;
- Наличие модели ORM;
- Генерация CRUD;
- Скорость работы;
- Наличие русской документации и сообщества разработчиков;
- Наличие дополнительных бесплатных модулей( хотя меня не сильно это до сих пор заботит).
Итак, начнём по порядку.
MVC — архитектура. Она реализована с yii следующим образом:
- Запрашивается
index.php, из него происходит подключение
фреймворка, вызывается статический
метод run: Yii::createWebApplication($config)->run();
- Инициализируется
конфиг приложения ( подключаются
компоненты, модули, настраиваются
параметры приложения);
- Далее происходит
разбор Url — роутинг запроса, за это
отвечает массив urlManager (/config/main.php);
- После определения
нужного контроллера вызывается
в один из методов экземпляра
контроллера, например в actionIndex, если
url будет выглядеть index.php?r=site/index (yii также
имеет возможность генерации ЧПУ);
- Далее создаётся
модель (класс CModel), если в методе
контроллера есть вызов модели, также
может вызываться виджет (Cwidget) или
представление ($this->render('view')).
Наличие модели ORM
реализовано посредством паттерна
ActiveRecord. Этот шаблон доступа к БД хорошо
описан с русскоязычной документации
Yii. Здесь следует выделить лишь несколько
моментов:
1. Если запрос через
ActiveRecord объединяет в себе данные
нескольких таблиц, то необходимо в
потомке класса CactiveRecord написать следующее
(для класса постов на форуме) :
public function relations()
{
return array(
'author'=>array(self::BELONGS_TO, 'User', 'author_id'),
'categories'=>array(self::MANY_MANY, 'Category',
'tbl_post_category(post_id, category_id)'),
);
}
Здесь обозначено название связи (aithor и categories), вид связи (BELONG_TO -1xN, MANY_MANY- nxm), название связанной таблицы (User и Category). Связь «один ко многим» осуществляется через FK author_id, а связь «многие ко многим» осуществляется через
вспомогательную таблицу tbl_post_category с первичными ключами post_id и category_id.
2. Доступ к данным осуществляется через два метода:
а) Обычный реляционный запрос.
$post=Post::model()->findByPk(10);
$author=$post->author;
Такой запрос порождает большую нагрузку на СУБД,
б) Для сокращения нагрузки используется «lazy loading».
$posts=Post::model()->with('author')->findAll();
Масса параметров для order by , where, having, group by передаются в функциях find. Для более подробной информации необходимо обратится к первоисточникам.
3.Генерация CRUD. Для генерации используется модуль gii, который необходимо подключить в кофиге main.php
'gii'=>array('class'=>'system.gii.GiiModule',
'password'=>'password',
),
Использовать его можно через URL - ~/index.php?r=gii. Через интерфейс можно создавать не только CRUD, а также отдельные модули, модели, контроллеры и формы.
Фреймворк сам позаботится о валидации данных на основе свойств столбцов указанных таблице.
4. Скорость работы пока не измерялось, однако на домашней странице фреймворка уверяют в том, что именно он самый быстрый:
Примером сайта, сделанного на фреймворке yii может служить сайт о
советских фильмах и книгах - dimspace.ru . Жду ваших комментариев!
Данная статья направлена всего лишь на ознакомление с php — фреймворком yii. Она не претендует на полноту описания и функционала данного фреймворка.