Привет, сообщество!
Это в очередной раз Александр и новости про PHP фреймворк Yii. Выпусков не было довольно долго, но это не потому, что ничего не происходит, а как раз наоборот: происходит всё и сразу. Над Yii3 работать всё приятней так как пакеты стабилизируются, а фреймворк становится более полным.
![](https://habrastorage.org/getpro/habr/upload_files/cd3/239/542/cd3239542079427c2cb4f0d541342ef8.png)
Фонд
Мы поучаствовали в эксперименте FundOSS по усилению финансирования OpenSource. Всего нас поддержали 49 человек на $813. FundOSS добавили до $3295 (минус комиссия Stripe). Это довольно хорошая сумма, которая позволит нам какое-то время выделять больше времени на развитие фреймворка. Спасибо, FundOSS, OpenCollective и, конечно, тем, кто нас поддерживает. Хочется, чтобы подобные эксперименты проводились почаще.
Сообщество
Мы запустили пред-релизную поддержку компаний через Telegram.
Был запущен экспериментальный канал #yii3chronicles в Telegram. Там мы рассказываем о том, что происходит прямо сейчас.
Дизайн и сайт
В прошлый раз я упомянул что компания 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
Готов большой набор обновлений:
Шаблоны приложений обновлены до Bootstrap 4.
Образы Docker обновлены до XDebug 3.
В пакете для генерации документации по API выявлены серьёзные проблемы с PHP 8. Мы работаем над этим. А пока используйте для генерации документации PHP 7.
Yii 3
Релизы пакетов:
View.
Я решил пока не заносить в список патч-релизы и не создавать на сайте новости про них. Это отнимает время, а контент там получается не сильно интересный.
Немного пакетов убили:
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.php, config/bootstrap-web.php и config/bootstrap-console.php. Туда можно добавлять такие callable, как function (ContainerInterface $container): void
. Они запустятся на старте приложения.
Добавлена команда composer run serve
. Делает то же, что и ./yii serve
.
В общем несколько упростилась структура директорий. Мы работаем над тем, чтобы сделать её ещё проще.
DI и Factory
Как DI, так и factory сейчас блокируют релизы остальных пакетов, так что мы занимается, прежде всего, ими. Делается много рефакторинга и доработок:
Оба пакета стали более строгими. Добавили валидацию в режиме разработки, убрали много способов задавать defintion-ы.
Сообщения об ошибках стали более информативными.
Сильно улучшили покрытие кода тестами.
Контейнер:
Удалили контекстный контейнер и delegate lookup. Они дублировали функции композитного контейнера.
Сделали сервис-провайдеры вместо предыдущих провайдеров (
DeferredServiceProvider
иServiceProvider
). Они навеяны container-interop, но не полностью повторяют его потому как в черновике стандарта были проблемы.Внутренний формат хранения definition-ов переделан для удобной отладки.
Добавлены
ReferencesArray
иDynamicReferencesArray
. Это позволило немного упростить конфиги.
Фабрика:
В
Factory::create()
остался только один аргумент, definition класса, который необходимо создать.Фабрика больше не реализует PSR
ContainerInterface
.Factory::get()
иFactory::has()
были удалены.Добавлено определение циклических ссылок.
Очереди
Упростили конфигурацию для простых случаев. Достаточно настроить брокер AMQP, а остальное заработает само.
Стало удобней настраивать каналы.
Адаптер AMQP теперь делает ack обработанным сообщениям.
HTML
Готовим 2.0.0. Будут новые теги, оптимизация генерируемого HTML и улучшение API.
Middleware dispatcher
Пакет практически готов к релизу. Мы ещё проверяем альтернативные идеи по его дизайну, но и текущий почти идеален.
Сильно повышена производительность. Middleware создаются только когда необходимо и кэшируются в памяти, что особо актуально для RoadRunner и Swoole.
Валидатор
Синтаксис валидаторов изменён:
// до
(new Number())->integer()->min(44);
// после
Number::rule()->integer()->min(44);
Yii Sentry
Создан пакет интеграции с Sentry. Sentry - сервис агрегации логов. Позволяет эффективно мониторить логи с продакшна. Поддерживаются и веб, и консоль.
Виджеты
Теперь используем friendly exception-ы.
Обновлена документация как у widget, так и у Yii widgets.
Улучшено покрытие тестами и общее качество.
Сильно почистили виджеты Bulma.
Обработка ошибок
Friendly exception-ы теперь выглядят приятней.
Мы решили поддерживать markdown и описать это в интерфейсах.
Конфиги
Улучшено отслеживание конфигов при добавлении и удалении пакетов. Хэши хранятся в файле
dist.lock
.Обновлена документация.
Дебаггер
После того, как мы убили версию под 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 большинства пакетов.
Почитать и посмотреть
Benchmark PHP Routing with Yii 2 results. We use FastRoute in Yii3.
Composer sunsetting the PHP Version Stats Blog Series and Yii2 stats.
Спасибо!
Хочу сказать спасибо всем спонсорам и разработчикам, благодаря которым стала возможна разработка Yii 3. Вместе у нас всё получится!
CraftCMS - Отличная OpenSource CMS на Yii2.
Onetwist Software - Услуги качественной разработки приложений.
SkillShare - Обучение новым навыкам.
Betteridge - Ювелирные изделия.
dmstr - Облачные решения на основе Docker.
HumHub - OpenSource решения для общения команды.
JetBrains - Отличные инструменты для разработки.
Skin.Club - Рынок скинов для CS:GO.
EFKO Group - фудтех, производство продуктов питания, и венчурные инвестиции. С недавнего времени ещё и ЭФКО Цифровые Решения, отдельная растущая сервисная IT-компания, которая планирует заниматься не только внутренними проектами ЭФКО.
Кроме перечисленных нас поддерживают отдельные разработчики и другие компании.
Отдельное спасибо тем, кто помог Yii 3 кодом: