Привет, сообщество!

Это в очередной раз Александр и новости про PHP фреймворк Yii. Выпусков не было довольно долго, но это не потому, что ничего не происходит, а как раз наоборот: происходит всё и сразу. Над Yii3 работать всё приятней так как пакеты стабилизируются, а фреймворк становится более полным.

Фонд

Мы поучаствовали в эксперименте FundOSS по усилению финансирования OpenSource. Всего нас поддержали 49 человек на $813. FundOSS добавили до $3295 (минус комиссия Stripe). Это довольно хорошая сумма, которая позволит нам какое-то время выделять больше времени на развитие фреймворка. Спасибо, FundOSS, OpenCollective и, конечно, тем, кто нас поддерживает. Хочется, чтобы подобные эксперименты проводились почаще.

Сообщество

Дизайн и сайт

В прошлый раз я упомянул что компания awesomic пригласила нас использовать сервис бесплатно в качестве благодарности за Yii 2. С тех пор мы кое-чего успели. На странице "official logos and design" главного сайта можно найти логотипы, favicon-ы, общие гайдлайны и стандарт для диаграмм.

Также прямо на главную страницу добавлена ссылка "Looking for Yii 3 progress?". Надеюсь, это ещё немного разогреет интерес к Yii3 и выльется в прирост issue и pull request.

​ Yii 1

Был выпущен Yii 1.1.24. Поддержка первой ветки фреймворка продлена до 31.12.2023.

​ Yii 2

Готов большой набор обновлений:

В пакете для генерации документации по API выявлены серьёзные проблемы с PHP 8. Мы работаем над этим. А пока используйте для генерации документации PHP 7.

​ Yii 3

​ Релизы пакетов:

Я решил пока не заносить в список патч-релизы и не создавать на сайте новости про них. Это отнимает время, а контент там получается не сильно интересный.

Немного пакетов убили:

  • yiisoft/serializer.

  • yiisoft/container-proxy.

  • yiisoft/yii-debug-frontend (смотрите далее в секции "Debugger").

Сейчас главный фокус команды — yiisoft/factory и yiisoft/di. Они блокируют 11 и 31 релиз других пакетов соответственно.

Инфраструктура

Мы решили запускать тесты всех пакетов в полночь в дополнение к запуску по коммиту. Это позволит видеть, что какой-то пакет разломался из-за обновления зависимости. Ситуация не очень частая для стабильных пакетов, но лучше перестраховаться. Пока ночные тесты включены не для всех реп��зиториев.

Yii Config теперь требует Composer 2. Первая версия Composer не видит свежие пакеты на packagist и не позволяет поставить Yii 3.

Yii development tool

В процессе разработки встречаются разные неудобства при использовании инструментария разработки, которые мы исправляем:

  • Была добавлена команда list, которая показывает активные пакеты.

  • Симлинки больше не создаются для неактивных пакетов.

  • Пакеты обрабатываются в алфавитном порядке.

  • Стало возможно работать с любыми пакетами, а не только с пакетами yiisoft.

Шаблоны приложений и демо

Мы переименовали "yii-demo" в просто "demo". На данный момент набор приложений и демо получается следующий:

  • yiisoft/demo - Классическая демка. HTML генерируется сервером.

  • yiisoft/demo-api - Демка REST API.

  • yiisoft/app - Шаблон приложения с классической генерацией HTML.

  • yiisoft/app-api - Шаблон приложения с REST API.

Минимальная версия PHP для всех шаблонов и демо поднята до PHP 8.0. Пакеты в этом плане остались без изменений и требуют 7.4+ так как могут использоваться отдельно.

Добавлена возможность прописывать бутстрап в config/bootstrap.phpconfig/bootstrap-web.php и config/bootstrap-console.php. Туда можно добавлять такие callable, как function (ContainerInterface $container): void. Они запустятся на старте приложения.

Добавлена команда composer run serve. Делает то же, что и ./yii serve.

В общем несколько упростилась структура директорий. Мы работаем над тем, чтобы сделать её ещё проще.

DI и Factory

Как DI, так и factory сейчас блокируют релизы остальных пакетов, так что мы занимается, прежде всего, ими. Делается много рефакторинга и доработок:

  • Оба пакета стали более строгими. Добавили валидацию в режиме разработки, убрали много способов задавать defintion-ы.

  • Сообщения об ошибках стали более информативными.

  • Сильно улучшили покрытие кода тестами.

Контейнер:

Фабрика:

  • В Factory::create() остался только один аргумент, definition класса, который необходимо создать.

  • Фабрика больше не реализует PSR ContainerInterfaceFactory::get() и Factory::has() были удалены.

  • Добавлено определение циклических ссылок.

Очереди

  • Упростили конфигурацию для простых случаев. Достаточно настроить брокер AMQP, а остальное заработает само.

  • Стало удобней настраивать каналы.

  • Адаптер AMQP теперь делает ack обработанным сообщениям.

HTML

Готовим 2.0.0. Будут новые теги, оптимизация генерируемого HTML и улучшение API.

Middleware dispatcher

Пакет практически готов к релизу. Мы ещё проверяем альтернативные идеи по его дизайну, но и текущий почти идеален.

  • Пакет обзавёлся инструкциями в readme.

  • Сильно повышена производительность. Middleware создаются только когда необходимо и кэшируются в памяти, что особо актуально для RoadRunner и Swoole.

Валидатор

Синтаксис валидаторов изменён:

// до
(new Number())->integer()->min(44);

// после
Number::rule()->integer()->min(44);

Yii Sentry

Создан пакет интеграции с SentrySentry - сервис агрегации логов. Позволяет эффективно мониторить логи с продакшна. Поддерживаются и веб, и консоль.

Виджеты

Обработка ошибок

Конфиги

Дебаггер

После того, как мы убили версию под Angular получился следующий набор пакетов:

  • yiisoft/yii-debug собирает отладочную информацию из вашего приложения.

  • yiisoft/yii-debug-api раздаёт собранное через REST API.

  • yiisoft/yii-debug-viewer - новый клиент, который можно использовать и как подключаемый модуль и как отдельное приложение. Добавлять свои панель сильно проще, чем в версии под Angular. По сложности сравнимо с Yii2.

Viewer добавлен в шаблоны приложений и демо и доступен как http://127.0.0.1:8080/debug/viewer, где 127.0.0.1:8080 - ваши локальные хост и порт.

Роутер

Были проведены как внутренний рефакторинг, так и изменения во внешнем API.

  • При настройке роутов IDE перестала подсказывать лишние методы.

  • Пользователю видно сильно меньше внутренностей.

  • Текущий роут доступен через отдельный сервис Yiisoft\Router\CurrentRoute.

  • Добавлена возможность задавать хост для группы через Group::host().

  • Добавлена возможность задавать префикс для имени роута для всей группы Group::namePrefix().

​ Новая и обновлённая документация

Также полностью обновлено руководство и README большинства пакетов.

​ Почитать и посмотреть

​ Спасибо!

Хочу сказать спасибо всем спонсорам и разработчикам, благодаря которым стала возможна разработка Yii 3. Вместе у нас всё получится!

  • CraftCMS - Отличная OpenSource CMS на Yii2.

  • Onetwist Software - Услуги качественной разработки приложений.

  • SkillShare - Обучение новым навыкам.

  • Betteridge - Ювелирные изделия.

  • dmstr - Облачные решения на основе Docker.

  • HumHub - OpenSource решения для общения команды.

  • JetBrains - Отличные инструменты для разработки.

  • Skin.Club - Рынок скинов для CS:GO.

  • EFKO Group - фудтех, производство продуктов питания, и венчурные инвестиции. С недавнего времени ещё и ЭФКО Цифровые Решения, отдельная растущая сервисная IT-компания, которая планирует заниматься не только внутренними проектами ЭФКО.

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

​ Отдельное спасибо тем, кто помог Yii 3 кодом: