Yii — фреймворк на PHP

yii-logo

Какой путь обычно проходит PHP разработчик? Сначала он пишет с нуля, пробует, делает всё на примерах. Свои функции, классы, файлы, структура. Изобретает свои велосипеды. И это здорово на первых этапах. После он осознаёт что много денег так не заработаешь и надо ускорять свою работу, используя CMS. Изучает, пробует, делает. После разработчик осознаёт что в CMS всё не так гибко реализовывается и пробует CMF. Хотя может он сразу изучает CMF. И вот тогда он осознаёт, что вот оно — счастье. Находит свой фреймворк и делает всё на нём. Хотя нет… Вот так — краткосрочные, простые и средней сложности проекты, без долгой последующей поддержки, делает на CMS. Ну а если проект свой или просто клиент согласен с предпочтениями разработчика, плюс к этому проект долгий, с долгой дальнейшей поддержкой и разработкой, то тут самое то — фреймворк.

Сейчас я хочу рассказать о фреймворке Yii. Этот фреймворк написан на PHP.

Yii это

Динамично развивающийся фреймворк на PHP с хорошим сообществом, в том числе русскоязычным. Один из разработчиков — россиянин Александр Макаров aka Sam Dark. Он и занимается популяризацией фреймворка в России и не только.

На данный момент есть две стабильные версии 1.1.* и 2.0.*. Кстати, вторая версия после долгой разработки вышла совсем недавно — 12 октября.

Дату старта проекта указывают как 1 января 2008 года. Дата релиза 3 декбаря 2008 года. Основатель проекта Qiang Xue.

На Yii повлияли следующие CMF и CMS:

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

Ruby on Rails — способ построения кофиграции к приложению, принцип реализации ORM.

jQuery — это javascript библиотека интегрирована в Yii. В том смысле, что всё же с Yii это серверное программирование, но виджеты, формы и прочие html куски сгенерированы вместе с прикреплением jQuery. В частности это делается для клиентской валидации, для ajax валидаци форм.

Symfony — взят принцип фильтров и архитектура расширений.

Joomla — взята модульная архитектура и интернационалиция.

Всё вышесказанное имеется ввиду про идея, а не про то, что прям взято из проекта. Ну jQuery непосредственно взята и лежит в vendors.

Про версии

Версия 1.0 уже не поддерживается.

Требования версии 1.1.* — это PHP 5.1.0. и выше.

Требования второй версии — это PHP 5.4 и выше.

Сайт фреймворка — http://www.yiiframework.com/

Русскоязычное сообщество — http://www.yiiframework.ru/

Кстати, сайт Александра Макарова — http://rmcreative.ru/ Естественно он там так же пишет и о Yii.

Что есть в этом фреймворке, что он из себя представляет:

  1. Он один из самых быстрых.
  2. Прост в изучении. Относительно прост. Тот, кто привык клепать сайты на CMS может не сразу поймёт структуру, принципы. Но если постараться, то оно того стоит.
  3. Структура проекта строится по паттерну MVC.
  4. Прослойка, интерфейсы для общения с БД. Для работы с базой данных имеются наборы классов DAO и ActiveRecord. DAO — это набор классов для непосредственного задания запросов к базе данных. ActiveRecord — классы, реализующие подход ORM, где таблица представляется классом, а записи таблицы — экзеплярами класса. Всё — DAO и ActiveRecord, работает через PDO, отсюда вытекает большой список поддерживаемых баз данных: SQLite, MySQL/MariaDB, PostgreSQL, SQL Server, Oracle, Firebird/Interbase 6 и другие. Полный список поддерживаемых драйверов тут.  Стоит заметить, что через DAO задаются непосредственно SQL запросы, синтаксис которых может всё таки различаться для разных СУБД.
  5. Имеется встроенная поддержка интернационализации. Кстати, к месту или нет будет сказано, но там так же есть возможность построения словоформ, как например 1 рубль, 10 рублей. Ну вы поняли.
  6. Генерация базового кода PHP генератором Gii, который является модулем Yii, изначально встроенным. Можно сгенериовать модель, контроллер или сразу модель, контроллер и views для операций CRUD на сущностью, таблицей. В Gii есть шаблоны генерации кода, которые можно изменить, чтобы файлы генерировались в том виде, в каком вы хотите. Хотите чтобы записи выводились таблично или «плиткой» — делаем свой шаблон генерируем. Если проект долгий, то можно озадачиться составлением различных шаблонов конкретно для этого проекта, что очень упростит жизнь и ускорит процесс разработки.
  7. Кеширование страниц и отдельных фрагментов.
  8. Поддержка тем оформления
  9. Возможность простого подключения сторонних классов, библиотек. При чём это делается очень просто. Можно подключить стороннюю CRM, если встроенная не устраивает. В интернете много статей о том, как они «скрестили» что то с Yii.
  10. Верно так же о обратное. Можно очень легко подключить Yii к другому проекту. Подключается файл, создаётся экземпляр приложения и его можно использовать. Можно пользоваться Yii API через этот экземпляр приложения. Приложением в Yii является главный класс, который содержит в себе всю информацию, все подключённые компоненты.
  11. Миграции базы данных.
  12. Поддержка REST
  13. Аутентификация и авторизация. На мой взгляд всё реализовано логично и понятно. В пару строк не объяснишь, поэтому как то кратко попробую. Разграничение доступа строится на основе ролей — RBAC. Строится иерархия Роль — Задача — Операция. Причём древовидная структура может быть большой. Роль присваивается пользователю. Пользователь может иметь несколько ролей. И по этой иерархии  можно есть ли связь между операцией, задачей и пользователем. Тем самым проверить доступность данного действия для пользователя. Фишка ещё в том что эта иерархия может сохранения как в базе, так в файле и другим образом. Авторизация выполнена в виде фильтра к контроллеру. Фильтр в Yii это код, который выполняется перед выполнением действия контроллера и решает, может ли выполниться действие контроллера при текущих условиях. В контексте авторизации может ли текущий пользователь выполнить текущую операцию. Кстати, есть ещё одна фишка — в этой иерархии можно описать дополнительные условия — бизнес-логику на допущение/не допущение при прочих равных условиях, но при текущих входных данных, условия выполнения. Например — многопользовательский блог и редактировать посты можно, но только хозяину поста.
  14. Перехват и обработка ошибок.
  15. Валидация входящих данных, записываемых данных — плюс к безопасности
  16. Автоматическое тестирование
  17. Есть большие возможности по расширению функционала — компоненты и поведения, модули и тд и тп
  18. Так же есть хорошие «плюшки» для безопасности. Есть возможности для предотвращение межсайтового скриптинга, предотвращение подделки межсайтовых запросов, предотвращение атак через cookie.
  19. Виджеты, формы, таблицы и прочее выводимые на сайте зачастую выводятся с прикреплением, инеграцией jQuery для дополнительного функционала, клиентской валидации, ajax валидации и прочей функциональности.

Может я ещё какие то фишки забыл написать.

Моё мнение

Делал я несколько проектов. Мне этот фреймворк понравился.

Из того что понравилось — понравились все фишки, которые описаны выше в списке. Единственное я там не применял темы оформления, миграцию и тестирование. Миграция — как то не нужно было. А темы оформления — я так и не понял в чём их плюсы, делал просто views и несколько layout. Наверное мне просто не понадобилась темизация, оформление было одно. Тестирование то же не применял, так были средние проекты, не было там особой надобности тесты делать.

Из того что не понравилось. Мне кажется вседозволенность расширения функционала — это модули, модули могут быть вложены в модули, в этих модулях могут быть поведения, которые может уже есть. Мне кажется надо как то жёстко задавать требования к построению модулей, проекта в целом. И/или надо как то вести реестр качественных проверенных, построенных по одним правилам расширений к Yii. Реестр расширений есть, то там такие разнообразные расширения от разных авторов с разной степенью готовности, заброшенности и тд и тп. Я один проект так делал — накидал всяких расширений. Получился какой то винигред.

Напутствие для новичков.

Если сразу не получилось изучить, то попробуйте ещё раз. Комбинируйте чтение документации с выполнением каких то примеров, которые есть в интернете. Их не очень много, как например по всяким CMS, но они есть. Смотрите примеры кода проектов. Начинайте с простого.

Вообще говоря на русскоязычном сайте(ссылка выше) очень хорошее руководство.

Тем, кто начинает изучать Yii сейчас, думаю можно начать сразу со второй версии. Документация уже есть. На русский переводится. Ну или тем кто с английским не очень можно почитать русскую документацию по Yii 1.1, изучить всё, попробовать всё, а после просто изучить изменения, пришедшие во вторую версию. Ну а так проекты можно и наверное даже нужно делать на второй версии. Правда сейчас наверное расширений не так много, ориентированных на вторую версию.

Рубрики: PHP
Теги: framework, PHP, Yii
Понравилось? Поделись с другими плз












Комментарии ВКонтакте





Комментарии с сайта
  1. Олег:

    Спасибо за полезную информацию, и сайт в целом.


Ответить Олег

*