Yii framework что это
Случайно встретился ещё один PHP-фреймворк. Обычно новые фреймворки я просматриваю мельком, но этот меня очень заинтересовал.
Авторы (Qiang Xue, Xiang Wei Zhuo), возможно, известны вам по довольно гибкому, но и довольно тормознутому фреймворку Prado.
Итак, что же в нём такого интересного?
Производительность
Если верить цифрам, он быстрее CodeIgniter, CakePHP, ZF и Symfony. А при использовании APC — не просто быстрее, а быстрее более, чем в два раза. Тут конечно стоит учесть, что сравниваются только самые базовые вещи.
Архитектура и возможности
— Полностью объектно-ориентированный без единой глобальной переменной или функции.
— Компонентный MVC.
— DAO, Active Record.
— Валидация форм.
— Аутентификация, авторизация.
— Генерация WSDL и всесторонняя поддержка веб-сервисов.
— Интернационализация, локализация.
— Многоуровневая система кэширования (данные, страницы, части страниц). Поддержка различных хранилищ кэша в виде бэкэндов.
— Много всего для предотвращения XSS, CSRF и других атак.
— Весь код на выходе — XHTML.
— Консольные генераторы скелетного кода.
— Позволяет использовать любой другой код (Zend Framework, PEAR и др.)
— На клиенте используется jQuery.
Заимствования идей
— Prado: Ну, тут понятно. Всё-таки авторы те же… Из него взяты идеи: компонентная структура, событийное программирование, слой абстракции СУБД, модульность, интернационализация, локализация и др.
— Ruby on Rails: Convention over configuration (можно начать работать, а конфигурировать как понадобится). Где-то в комментариях к документации народ отзывается, что разобраться проще, чем с Rails. Также на RoR похож Active Record.
— Symfony: фильтры, плагины.
— Joomla: Модули, перевод строк.
Документация
Документация конечно не такая простая и небольшая, как в CodeIgniter, но очень и очень хороша. На русском нет ничего, но с документацией на английском всё очень хорошо:
Третьего числа состоялся релиз стабильной версии 1.0.0. Распространяется по new BSD (можно использовать как для открытых, так и для закрытых приложений).
Yii – это высокопроизводительный компонентный PHP фреймворк, предназначенный для быстрой разработки современных веб-приложений. Слово Yii (произносится как Йи [ji:] ) в китайском языке означает «простой и эволюционирующий». Также Yii может расшифровываться как акроним Yes It Is!
Будущее Yii
Скорость развития оставляет желать лучшего
Помните, как долго мы ждали версию 2.0?
А вы знаете, когда выйдет 2.1? Никто не знает.
2.0.x: 222 открытых тикета — No due date.
2.1.0: 58 тикетов — No due date.
2.2.x: 1 тикет — No due date.
Т.е. для 2.1 еще не определена дата релиза, а для 2.2 даже примерный скоуп задач. До третьей версии, о которой еще рано даже начинать говорить, мы вряд ли увидим кардинальные изменения в архитектуре.
Следует признать, что ближайшие конкуренты — Laravel и Symfony — внедряют новые фишки и выпускают версии гораздо резвее. У обоих конкурентов уже есть LTS-версии. Yii 2.1 вроде бы тоже должна иметь long-term support.
Компонентные фреймворки победили
Если кто-то напишет хорошее расширение для Yii — оно не выйдет за пределы комьюнити Yii.
Библиотека же, которую можно подключить без бубна к любому проекту, может улучшаться кем угодно.
Код, написанный на PHP, работает везде, а код, написанный на Yii — только на Yii.
Вы либо ставите на Yii всё, либо ничего. Это риск для долгосрочного проекта.
Конечно, приложив усилия, можно писать framework-agnostic код и разруливать все через DI-контейнер, но это не поощряется.
Если вы все-таки решитесь на это, вам прийдется забыть про Yii-вский ActiveRecord
или начать писать неприлично толстые прослойки между фреймворком и вашей бизнес-логикой.
Но это, мягко говоря, неоправданно.
Если вы наследуете какой-либо класс своего приложения от любого другого класса Yii, без Yii вы его работать не заставите, ведь он обязательно наследует Object или Component. Вот.
Даже если вы вытащите вместе с ним весь ворох родительских классов и реализуемых интерфейсов, это вам не поможет.
С модными нынче DDD и CQRS/Event Sourcing Yii также вам не помощник. Скорее, даже будет вставлять палки в колеса.
Команда фреймворка всё пишет сама. Даже VarDumper они написали свой, а не взяли из компонентов Symfony.
Регулярно поддерживать и улучшать столько компонентов — очень непростая задача для небольшой команды. И у этой команды есть два пути.
Во первых, можно оставить все как сейчас.
Все компоненты пишем сами. Сильная связанность. Полностью изолированная экосистема фреймворка. Небольшое уютное комьюнити. Медленная деградация.
Во-вторых, можно все-таки разбить монолитный Yii на независимые от фреймворка компоненты.
Но тогда это будет уже не Yii с простым и удобным API, а просто еще один набор компонентов, не востребованный вне экосистемы Yii.
Оба пути ведут в никуда.
PHP 7
Yii 2 без проблем работает под PHP 7+.
Однако чтобы использовать все возможности type-hinting-а, core-разработчикам придется переписать его до неузнаваемости.
Дело в том, что сейчас много методов принимают аргументы нескольких типов:
Таких мест в фреймворке очень много. Кого-то это бесит, кто-то считает это API удобным.
Но если мы хотим использовать тайпхинтинг, все это удобное API превращается в тыкву.
Qiang так и не вернулся
Полтора года назад на форуме Yii подняли интересный вопрос, мол, не забил ли Qiang Xue на свое детище?
Как бы там ни было, с тех пор от него так и не пришло ни одного коммита.
Возможно этот факт ничего не значит.
В любом случае поддержкой фреймворка сейчас занимаются замечательные ребята, и они хорошо справляются.
ApiDoc extension version 3.0.5 released
We are very pleased to announce the release of the ApiDoc extension version 3.0.5.
Для каких задач больше всего подходит Yii? ¶
Yii – это универсальный фреймворк и может быть задействован во всех типах веб-приложений. Благодаря его компонентной структуре и отличной поддержке кэширования, фреймворк особенно подходит для разработки таких крупных проектов, как порталы, форумы, CMS, магазины или RESTful-приложения.
Debug extension 2.1.19 released
Debug extension version 2.1.19 was released.
Covers everything from very basics to advanced topics. Explanations are very clear. Additionally to the guide-style chapters there are two complete examples. The second edition (for Yii 2.0) is not finished yet, but buyers can download updates as they are available.
It is a step by step introduction to the framework, which is based around creating a reusable template that can serve as the basis for your projects.
Based around implementing a real world CRM following many best practices. It is assumed that reader is experienced enough in OOP so don't expect OO-basics explained.
Embrace 360-degree testing on your Yii 2 projects using Codeception.
The book is a set of individual independent recipes. Each recipe shows how to do something useful with Yii explaining why it's done, how it's done, why it works and how exactly it works.
Craft is a content-first CMS that aims to make life enjoyable for developers and content managers alike.
Choosing the right PHP framework was a vital decision when we set out to build Craft. With its elegant, modular architecture, rich internationalization support, and helpful documentation, Yii was a perfect fit.
Brandon Kelly
creator of Craft
HumHub is a free social network software and framework built to give you the tools to make communication and collaboration easy and successful.
Yii Framework is our rock solid foundation and provides us with numerous well designed features already out of the box. Especially the flexibility in form of modules or the event concept, perfectly match our requirements. In and above that, Yii has very active and helpful community!
Lucas Bartholemy
CEO of HumHub
LUYA is a free and open-source toolbox to build websites and web applications of any size, extending the Yii Framework with an administration, a content management system and other useful modules.
For us, the well-thought-out, solid Yii Framework is the giant upon whose shoulders LUYA is built. We are happy to be a part of the passionate Yii community.
Yii Framework представляет собой один из лучших PHP-фреймворков, предназначенных для разработки больших веб-приложений. В цикле «Yii Framework для чайников» мы научимся разворачивать yii-приложение на сервере, узнаем как работать с фреймворком и познакомимся с основными возможностями, которые он предоставляет. Все это я постараюсь рассказать максимально просто и наглядно.
Развертка Yii-приложения
Для того, чтобы использовать Yii Framework необходимы:
- Веб-сервер с предустановленным PHP версии 5.1 и выше.
- Базовые знания PHP, объектно-ориентированного программирования и паттерна MVC.
- Архив с самим фреймворком. Можно скачать с официального сайта.
- Текстовые файлы CHANGELOG, LICENSE, README, и UPGRADE, содержание которых очевидно из названий.
- Папку demos, содержащую четыре демо-проекта (блог, телефонную книгу, игру «Виселица» и простой «Hello, world!»).
- Папку framework с самим фреймворком.
- Папку requirements с тестами совместимости фреймворка и хостинга.
Для того, чтобы развернуть yii-приложение воспользуемся командной строкой. Из корня выполним следующие команды в терминале:
При этом в папке сайта будет развернуто демонстрационное yii-приложение и выставлены требуемые права на папки и файлы.
Структура Yii-приложения
- assests — файлы, которые генерирует фреймворк в процессе работы.
- css — стили.
- images — изображения.
- protected — основная папка приложения. Ее рассмотрим подробнее.
- themes — тема фреймворка
- commands — приложения для управления фреймворком через консоль.
- components — различные компоненты.
- config — конфигурационные файлы.
- controllers — контроллеры (MVC).
- data — SQLite база данных.
- etensions — расширения для фреймворка.
- messages — мультиязычность.
- migrations — миграции.
- models — модели (MVC).
- runtime — временные файлы, создаваемые фреймворком.
- tests — тесты.
- views — представления (MVC).
Настройка Yii-приложения
Любые взаимодействия с пользователем в yii-приложении происходят через bootstrap-файл index.php
Большинство настроек находятся в файле /config/main.php. Файл конфигурации возвращает многомерный ассоциативный массив настроек, некоторые из которых по умолчанию предопределены.
Создание БД для будущего приложения
В качестве примера мы будем работать с базой данных, содержащей некоторое подобие хабра-комментариев и хабра-пользователей. Наглядно ее можно представить следующим образом:
Yii, вероятно, самый популярный PHP фреймворк на просторах СНГ.
Многие годы он был замечательным инструментом и помогал нам зарабатывать на хлеб с маслом.
Но стоит ли начинать на нем новые проекты в 2017-м? Я задумался.
RBAC, file storage and rules container 1.0.0
Three RBAC packages are released in their initial stable version: rbac, rbac-php, and rbac-rules-container.
Архитектура фреймворка
Мысленно вернемся в 2014-й.
Ожидание второй версии Yii кажется бесконечно долгим, core-разработчики не называют никаких сроков.
Разработка ведется в закрытом от публики репозитории.
И вот SamDark презентует Yii 2.0:
Выходит, архитектура закладывалась в 2014 — 3 = 2011-м году. Или раньше?
Взгляните на Component.php из Yii 2
А теперь на CComponent.php из Yii 1
А теперь на TComponent.php из PRADO Framework — дедушки нынешнего Yii. Выглядит знакомо.
Истоки самого же PRADO уходят куда-то во времена расцвета Delphi:
С первой версии нам достались глобальные константы в коде, свой autoloader, своя хитрая система алиасов для файлов и папок.
Ооооок. Просто напоминаю, что сейчас идет вторая половина 2017-го.
Приходя к Yii с других инструментов, вы должны понимать, что здесь весь ваш предыдущий опыт становится нерелевантным.
Yii — это не просто фреймворк, это попытка сделать свою надстройку над языком.
Все, абсолютно все компоненты Yii наследуются от класса Object, в котором переопределяются __get , __set , __isset и так далее.
Многие классы наследуются от Component, который наследуется от Object, и в котором еще раз переопределяются все магические методы.
Благодаря этому все классы фреймворка из коробки умеют бросать события, подписываться на них, могут содержать т. н. behaviors.
Каждая модель ActiveRecord в вашем приложении неявно наследует 5 классов и реализует 5 интерфесов.
У всех ваших моделей, так называемых "компонентов", "виджетов", контроллеров, логгеров, хелперов, валидаторов — одни и те же предки.
Компоненты, их события, поведения… возможно, они имели смысл в PRADO Framework, где "компонентами" были TButton, TAccordion и все вот это.
Среди достоинств Yii часто озвучивают простоту фреймворка. Но это правда только отчасти.
Знаете, что происходит, когда вы делаете что-то безобидное вроде $post->title = 'Hello' ?
Вы можете побывать здесь, здесь, здесь, здесь, а также в любом прикрепленном к $post event-у или behavior-у.
Это может свести с ума во время отладки.
Не добавляет радости и тот факт, что любой компонент приложения из любого места можно достать через Yii::$app. Эдакий экземпляр приложения и сервис-локатор в одном лице.
DI-контейнер
В Yii 2 он есть.
В нем нет ни compile-time проверок, ни защиты от circular references, ни тегов (как в Symfony и Laravel), ни Contextual Binding (как в Laravel).
Доступен из любой точки приложения как Yii::$container. Снова.
Внутри Yii 2 собственный контейнер не используется, а все компоненты лежат в Yii::$app, прямо как в первой версии.
Интересный факт: Qiang начал писать Yii 2 в 2011 году, а контейнер был добавлен только три года спустя, между 2.0.0-alpha и 2.0.0-beta.
Active Record
Если оставить в стороне споры Active Record vs Data Mapper, то реализация AR в Yii очень даже ничего.
Удобное и лаконичное API, поддерживаются все популярные СУБД. Есть нормальные миграции из коробки.
Единственный минус вытекает из сильной связанности фреймворка — если ваша бизнес-логика оказалась в AR-моделях, то переиспользовать все это добро можно только в рамках проектов на Yii.
Фронтенд
Тут все плохо.
В Laravel есть Elixir, в Symfony с недавних пор — Webpack encore.
Yii же не просто не помогает с фронтендом, а еще и добавляет головной боли.
Для установки Yii 2 вам нужно в принудительном порядке поставить глобально fxp/composer-asset-plugin, для того, чтобы поставить jQuery c помощью composer-а, для того, чтобы установился Yii.
jQuery входит в обязательные зависимости Yii 2.
Не припоминаю ни одного другого composer-пакета, для установки которого нужно было танцевать с бубном.
В проектах с Yii каждый запуск composer install/update происходит утомительно долго,
т.к. composer каждый раз идет гулять куда-то в глубины репозитория Bower-пакетов.
Еще мне когда-то пришлось откатывать версию composer-а на более старую, из-за несовмесимости с текущей версией fxp/composer-asset-plugin.
В качестве альтернативы предлагается использовать дополнительный composer-репозиторий, который кеширует npm и bower пакеты. Что тоже выглядит немного костыльно.
Если знаете, как поставить Yii без возни с ненужными фронтенд-пакетами — пишите в комментариях.
Все остальные компоненты
Версии Yii ¶
На данный момент существует две основные ветки Yii: 1.1 и 2.0. Ветка 1.1 является предыдущим поколением и находится в состоянии поддержки. Версия 2.0 – это полностью переписанный Yii, использующий последние технологии и протоколы, такие как Composer, PSR, пространства имен, трейты и многое другое. 2.0 — текущее поколение фреймворка. На этой версии будут сосредоточены основные усилия несколько следующих лет. Данное руководство именно о версии 2.0.
Требования к ПО и знаниям ¶
Yii 2.0 требует PHP 5.4.0 и выше и наилучшим образом работает на последней версии PHP 7. Чтобы узнать требования для отдельных возможностей, вы можете запустить скрипт проверки требований, который поставляется с каждым релизом фреймворка.
Для разработки на Yii потребуется общее понимание ООП, так как фреймворк полностью следует этой парадигме. Также стоит изучить такие современные возможности PHP как пространства имён и трейты. Понимание этих концепций позволит вам более легко освоиться c Yii 2.0.
Found a typo or you think this page needs improvement?
Edit it on github !
Yii is a fast, secure, and efficient PHP framework.
Flexible yet pragmatic.
Works right out of the box.
Has reasonable defaults.
The primary way of installing Yii is by using Composer.
- Install Composer
- Get a basic project template
- Run ./yii serve
You get a nice template which includes:
- MVC
- Some static pages
- Contact via email form
- Login and logout
- Bootstrap UI template
- Powerful debugger
- and more.
While Yii can virtually eliminate most repetitive coding tasks, you are responsible for the real creative work. This often starts with designing the whole system to be built, in terms of some database schema. The best way to do this is by using migrations.
After it's done, use the code generator to generate models, CRUD and more.
Then customize the generated code to suit your needs.
Check these helpful resources:
Yii Console 1.1.0
Minor release of Yii Console package was tagged:
Сравнение Yii с другими фреймворками ¶
Если вы уже знакомы с другими фреймворками, вам наверняка будет интересно сравнить их с Yii.
- Как и многие другие PHP фреймворки, для организации кода Yii использует архитектурный паттерн MVC (Model-View-Controller).
- Yii придерживается философии простого и элегантного кода, не пытаясь усложнять дизайн только ради следования каким-либо шаблонам проектирования.
- Yii является full-stack фреймворком и включает в себя проверенные и хорошо зарекомендовавшие себя возможности, такие как ActiveRecord для реляционных и NoSQL баз данных, поддержку REST API, многоуровневое кэширование и другие.
- Yii отлично расширяем. Вы можете настроить или заменить практически любую часть основного кода. Используя архитектуру расширений, легко делиться кодом или использовать код сообщества.
- Одна из главных целей Yii – производительность.
Yii — не проект одного человека. Он поддерживается и развивается сильной командой и большим сообществом разработчиков, которые ей помогают. Авторы фреймворка следят за тенденциями веб-разработки и развитием других проектов. Наиболее подходящие возможности и лучшие практики регулярно внедряются в фреймворк в виде простых и элегантных интерфейсов.
Что в итоге
Yii — неплохой инструмент и если вам с ним комфортно — отлично.
В конце-концов, он практичен. Трудно представить задачу, которую невозможно решить, используя Yii.
Еще Yii невероятно популярен в СНГ. Зная его, очень легко найти как работу, так и сотрудников.
Но если у вас намечается новый долгосрочный проект, обязательно рассмотрите альтернативы.
Не выбирайте инструмент только из-за привычки.
Кроме того, вы всегда можете помочь команде фреймворка. Присылайте внятные баг-репорты, отправляйте пул-реквесты, пишите качественные расширения, помогайте новичкам на форуме и в gitter-е.
Читайте также: