Открыть сервис

Yii

Yii — это свободный объектно-ориентированный компонентный фреймворк для разработки веб-приложений, написанный на языке PHP. Относится к классу MVC-фреймворков (Model-View-Controller). Основные характеристики: высокая производительность, поддержка кэширования, встроенная аутентификация и авторизация, работа с базами данных через объектно-реляционное отображение (ORM) и генерация кода (Gii). Yii распространяется под лицензией BSD.

История

Разработка Yii началась в 2006 году. Автором является программист Цян Сюэ (Qiang Xue), который ранее работал над фреймворком Prado (PHP). Первая публичная версия — Yii 1.0 — была выпущена 3 декабря 2008 года. Основной целью создания было преодоление ограничений Prado, в частности, улучшение производительности и упрощение архитектуры.

В 2010 году вышла версия 1.1, которая добавила поддержку реляционных баз данных, миграции схем, виджеты и улучшенную работу с формами. Yii 1.1 оставался стабильным и поддерживаемым до 2018 года.

В октябре 2014 года была выпущена вторая версия — Yii 2.0. Она стала значительным пересмотром архитектуры: введена поддержка пространств имён (PHP 5.4+), улучшенная работа с Composer (менеджер зависимостей для PHP), новый шаблонизатор (Twig, Smarty или собственный PHP-шаблонизатор), а также расширенная поддержка RESTful API. Yii 2.0 получил модульную структуру, позволяющую подключать сторонние расширения через Packagist.

В 2020 году команда Yii объявила о начале работы над Yii 3.0, который переписан с нуля с использованием PHP 7.4+ и принципов SOLID. Первый стабильный релиз Yii 3.0 ожидается в 2023-2024 годах. На данный момент (2024 год) Yii 3.0 находится в стадии активной разработки и не рекомендуется для production-проектов.

Архитектура и принципы

Yii реализует классический шаблон MVC (Model-View-Controller). Модели отвечают за бизнес-логику и данные, контроллеры обрабатывают запросы и управляют потоком, представления (виды) генерируют HTML-код. Фреймворк использует концепцию компонентной архитектуры: большинство классов (например, DbConnection, User, Cache) являются компонентами, которые можно настраивать через конфигурацию и повторно использовать.

Компонентная модель

Каждый компонент в Yii наследуется от базового класса yii\base\Component. Он поддерживает:

  • Свойства — доступ к публичным полям и методам-геттерам/сеттерам.
  • События — механизм подписки на действия (например, beforeSave, afterDelete).
  • Поведения — возможность динамически добавлять методы и свойства к компоненту (аналог трейтов, но с конфигурацией).

Жизненный цикл запроса

  1. Входной скрипт (index.php) загружает автозагрузчик Composer и создаёт экземпляр приложения (yii\web\Application или yii\console\Application).
  2. Приложение загружает конфигурацию (файлы config/web.php, config/params.php).
  3. Компонент request обрабатывает HTTP-запрос.
  4. Компонент urlManager определяет маршрут (контроллер и действие).
  5. Контроллер выполняет действие, используя модели и представления.
  6. Ответ (HTML, JSON, XML) отправляется клиенту.

Основные возможности

Работа с базами данных

Yii предоставляет два подхода к работе с БД:

  • DAO (Data Access Objects) — низкоуровневый API для выполнения SQL-запросов с поддержкой PDO.
  • Active Record — ORM, где каждая таблица представлена классом, а строки — объектами. Поддерживаются связи (has-one, has-many, belongs-to), ленивая и жадная загрузка, миграции.

Пример определения модели:

``php class User extends \yii\db\ActiveRecord { public static function tableName() { return 'user'; } } ``

Кэширование

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

Аутентификация и авторизация

Встроенная система аутентификации реализована через компонент user и интерфейс IdentityInterface. Авторизация — через RBAC (Role-Based Access Control) с поддержкой ролей, разрешений и правил. RBAC может храниться в базе данных или в файлах.

RESTful API

Yii 2.0 имеет встроенную поддержку RESTful API. Контроллеры наследуются от yii\rest\ActiveController, автоматически обрабатывают HTTP-методы (GET, POST, PUT, DELETE) и возвращают данные в формате JSON или XML. Встроены механизмы пагинации, фильтрации и аутентификации (OAuth2, HTTP Basic).

Генерация кода (Gii)

Gii — модуль для генерации кода через веб-интерфейс. Позволяет создавать модели, контроллеры, CRUD-операции, миграции, формы и виджеты на основе существующей базы данных. Генерируемый код можно редактировать.

Тестирование

Yii интегрирован с PHPUnit и Codeception. Поддерживаются модульные, функциональные и приёмочные тесты. Встроенные фикстуры (fixtures) для заполнения тестовой базы данных.

Версии

ВерсияДата выходаКлючевые особенности
Yii 1.03 декабря 2008Первый стабильный релиз.
Yii 1.110 января 2010Поддержка реляционных БД, миграции, виджеты.
Yii 2.012 октября 2014Пространства имён, Composer, RESTful API, Gii, улучшенная производительность.
Yii 3.0В разработкеPHP 7.4+, SOLID, модульная архитектура, DI-контейнер, PSR-7/PSR-15.

Применение

Yii используется для создания веб-приложений различной сложности:

  • Корпоративные порталы — системы управления контентом (CMS), внутренние CRM.
  • Интернет-магазины — благодаря ORM и кэшированию.
  • API-сервисы — RESTful API для мобильных приложений и SPA.
  • Административные панели — с использованием Gii для быстрой генерации CRUD.

Известные проекты на Yii: HumHub (социальная сеть для предприятий), DotPlant (CMS для интернет-магазинов), частично WordPress (плагины), а также множество российских веб-сервисов (например, сервисы доставки, онлайн-кассы).

Критика

Основные недостатки Yii:

  • Сложность обновления — переход с Yii 1.1 на Yii 2.0 требует полной переработки кода.
  • Документация — хотя официальная документация на русском языке существует, она не всегда актуальна для новых версий.
  • Сообщество — после 2020 года активность сообщества снизилась, многие разработчики перешли на Laravel или Symfony.
  • Производительность — Yii 2.0 быстрее многих PHP-фреймворков, но уступает современным решениям на Go или Rust.

Источники

  • Официальная документация Yii Framework (yiiframework.com)
  • «Yii 2.0: Руководство разработчика» (перевод на русский язык)
  • Qiang Xue, «Yii Framework: A High-Performance PHP Framework» (2008)
  • PHP Framework Comparison: Yii vs Laravel vs Symfony (2023)

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →