Привет, сообщество!
Это первый выпуск новостей в 2021. Начало года вышло продуктивным. Мы начали активно релизить пакеты Yii 3, есть значительный прогресс с пока не релизнутыми пакетами. Улучшили инструментарий разработки, много всего исправили, убили лишние пакеты. И всё это параллельно с поддержкой Yii 2 и решением проблем с финансированием.
Команда и фонд
Несмотря на то, что 2020 был через край долбанутым, для Yii всё вышло неплохо. Удалось договориться о продлении поддержки Yii 1.1 и других вещах в обмен на единовременное или постоянное пополнение фонда.
Эти соглашения и, конечно же, наши любимые спонсоры, позволили команде меньше работать над коммерческими проектами и больше над фреймворком. Фонд удалось использовать полностью.
Я был чрезвычайно воодушевлён возросшей скоростью разработки, окунулся в неё с головой и немного подзабыл о финансовой части. В январе меня ждал неприятный сюрприз. Оказывается, что забыл я про очень важный факт. А именно, что немаленькая часть средств фонда поступила не рекуррентными платежами. Соответственно, бюджета на всё не хватило. Чтобы не случилось полной катастрофы, я перестал забирать деньги фонда с OpenCollective и начал активно искать партнёров среди компаний, которые используют Yii и PHP. Результаты пока спорные, но, надеюсь, всё наладится.
Если хотите пообщаться на тему партнёрства, пишите в sam@rmcreative.ru.
Yii 2
Вышел Yii 2.0.41. Сильно помогли с релизом Paweł Brzozowski, недавно присоединившийся к команде Yii 2, и Robert Korulczyk с его тщательными ревью всего вливаемого в master кода. Много часов было потрачено на безопасность фреймворка. Удалось перебрать текущие сообщения о предполагаемых уязвимостях и улучшить безопасность.
Yii 3
Прежде всего, релизы:
Event dispatcher 1.0.0
Test support 1.1.0 and 1.2.0
CSRF 1.0.0
Auth 2.0.0
JWT auth 1.0.0
Strings 1.2.0 and 2.0.0
Arrays 1.0.0
Cache and its drivers 1.0.0
Request body parser 1.0.0
Files 1.0.0
Var dumper 1.0.0
Log and its drivers 1.0.0
В каждом пакете есть документация, отличное покрытие тестами, код вычищен и, конечно же, публичное API достаточно стабилен.
Ну а теперь время рассмотреть интересные изменения с предыдущего выпуска новостей. Для удобства изменения сгруппируем по пакетам.
Arrays
Добавлен
ArrayHelper::pathExists()
.Добавлен
ArrayHelper::group()
. Это алиасArrayHelper::index()
.Удалены модификаторы.
Data
Добавлен DeletableInterface.
В
PaginatorInterface
и реализации добавленgetSort()
.Класс Sort теперь инстанциируется через статические методы-конструкторы, меняющие режим работы.
Auth
IdentityRepositoryInterface::findIdentityByToken()
был выделен вIdentityWithTokenRepositoryInterface
. Также, теперь можно настроить токен.Был отрефакторен пакет аутентификации JWT.
Config plugin
После большого количества попыток улучшить Composer config plugin стало очевидно что он стал слишком сложным: AST, мёрж конфигов и всё что там творилось под капотом. Мы приняли решение сделать его менее зависимым от пакетов yiisoft и сделать новый, более простой и производительный, пакет.
Все шаблоны приложений уже были переведены на новые конфиги. Скорее всего нужно будет исправлять баги и повышать удобство использования пакета.
Error handler
Рефакторинг, ридми.
Поддержка Xdebug 3 для получения более подробных стектрейсов.
ExceptionResponder, при помощи которого можно формировать HTTP-ответ в зависимости от пойманной ошибки. Это может быть полезно для исключений вроде
NotFoundException
. Будут ли такие исключения из коробки пока обсуждаем.Renderer-ы теперь могут отдавать HTTP-заголовки, добавлен renderer, который выводит ошибку в заголовках. Полезно если показывать ошибки текстом неудобно. Например, для некоторых API или при генерации картинок.
Элементы stacktrace для классов из
vendor
теперь отображаются отдельной группой и по умолчанию свёрнуты. Так как ошибки обычно в самом приложении, это позволяет не отвлекаться на нерелевантную информацию.
Обработка ошибок в общем
В пакет yiisoft/yii-event добавлен режим отладки. В нём проверяются все обработчики событий сразу.
Улучшены ошибки DI контейнера.
Strings
Добавлен
NumericHelper::isInteger()
.Добавлена поддержка
bool
вNumericHelper::normalize()
.Был переработан матчинг по wildcard. Вместо довольно большого количества опций добавили
**
, совпадающий, в том числе, с сепараторами.
Var dumper
Улучшена поддержка PHP 8.
VarDumper::dump()
теперь, по умолчанию, подсвечиваем код.Удалён
VarDumper::asPhpString()
.Весь специфичный для Yii debugger код был перенесён в сам пакет.
Покрыты все найденные интересные случаи при экспорте замыканий.
При установке пакета становятся автоматически доступны
d()
иdd()
.
Html
Пакет был значительно переработан. Главных изменений два:
Вывод по умолчанию экранируется.
Теги реализованы как отдельные объекты, создаваемые через статические методы-фабрики из Html. Для пользователя это значит, что конфигурация теперь производится через вызов методов. То есть теперь IDE это дополняют и проверяют.
Валидатор
Много рефакторинга. Самое интересное:
Из Rule выделены интерфейсы.
Из Validator убрано состояние.
Реализована валидация вложенных структур.
Улучшена реализация перевода ошибок
Возможность определять правила валидации прямо в валидируемом объекте.
Можно валидировать любые данные, не обязательно DataSetInterface.
Правило InRange разделено на InRange и Subset.
Формы
Атрибут "required" теперь добавляется к input-ам на основе правил валидации.
Из-за изменений в валидаторе поменялся способ валидации форм.
Перевод сообщений
Почти готов к релизу. Можете почитать его readme.
Mailer
Mailer и адаптер для SwiftMailer были вычищены и отрефакторены. Добавлена документация. Релизнем как только будут готовы зависимости.
DB и ActiveRecord
В обоих пакетах были исправления, оба ещё больше покрыли тестами. Wilmer, член команды, который занимался этими пакетами, уже проверил из в бою на Telegram боте с 120 тысячами запросов в сутки.
Оба пакета изначально были портированы из Yii 2 почти как есть. Была убрана магия, добавлены типы, покрытие тестами доведено почти до 100%. Но, несмотря на то что пакеты стали даже лучше, чем Yii 2, дизайн сохранился примерно в том же виде. Нам предстоит трудный выбор, релизить ли первую версию как есть или же сначала затеять гигантский рефакторинг.
Скорее всего выберем первое.
yii-web
Middleware теперь иммутабельны.
User
Значительно переделали пакет:
Один
Два
Три
Всё ещё не до конца довольны. Скорее всего будем переделывать ещё.
Bootstrap и Bulma
Убили пакет Bootstrap 4.
В Bootstrap добавили виджет Toast.
В Bulma добавили виджет Panel
Все методы конфигурации сделали иммутабельными.
Оба пакета адаптированы к изменениям в пакете HTML.
Консоль
Появилась возможность добавлять команды со своим именем.
Debugger
Есть прогресс как в API, так и на фронтенде.
Сбор данных стал ещё более стабильным.
Начали собирать данные с роутера. Для этого используется container proxy, что позволило совсем не менять сам пакет роутера.
Добавлена консольная команда для сброса собранных данных.
На фронтенде добавили сортировку в списке запросов.
Docker
Добавлена поддержка PHP 8.
Инструментарий разработки фреймворка
Улучшили инструментарий чтобы можно было удобно работать даже не поставив все пакеты. Улучшили точность фиксера зависимостей. Добавили новую команды release/what
. Она подсказываем какой пакет релизить следующим. Приоритет отдаётся пакетам без нестабильных зависимостей и, при этом, блокирующих как можно больше релизов других пакетов.
Шаблоны приложений
К веб-шаблонам применён view injection.
Layout влит в один файл.
Решили называть роут индексной страницы "home".
Применили новый yiisoft/config.
Реализовали концепт application runner.
Добавили проверку обработчиков событий.
Убрали демо-части из app-api в demo-api.
Перестали создавать формы при помощи контейнера.
Новая и обновлённая документация
DI container readme
010 - Code Style
017 - Tags
018 - Widgets
019 - View code style
Configuring SSL peer validation
Handling errors
Mailing
Почитать-посмотреть
Building E-commerce website with Yii2.
Вышел RoadRunner 2.
647 проектов на YiiPowered.
Черновик интерактивного шелла для Yii 3.
Пакет для превращения в ссылки email-ов и URL-ов в тексте.
Does it belong in the application or domain layer?.
Object properties and immutability.
Contract tests.
❤️ Спасибо!
Хочу сказать спасибо всем спонсорам и разработчикам, благодаря которым стала возможна разработка Yii 3. Вместе у нас всё получится.
Я понял, что ранее не писал о компаниях, которые поддерживают разработку Yii. Вот самые большие спонсоры с коротким описанием:
CraftCMS - Отличная OpenSource CMS на Yii2.
Onetwist Software - Услуги качественной разработки приложений.
SkillShare - Обучение новым навыкам.
Betteridge - Ювелирные изделия.
dmstr - Облачные решения на основе Docker.
HumHub - OpenSource решения для общения команды.
JetBrains - Отличные инструменты для разработки.
Skin.Club - Рынок скинов для CS:GO.
ЭФКО - фудтех, производство продуктов питания, и венчурные инвестиции. С недавнего времени ещё и ЭФКО-тех, отдельная растущая сервисная IT-компания, которая планирует заниматься не только внутренними проектами ЭФКО.
Кроме перечисленных нас поддерживают отдельные разработчики и другие компании.
Отдельное спасибо тем, кто помог Yii 3 кодом:
Wilmer Arambula.
Rustam Mamadaminov.
Viktor Babanov.
Valerii Gorbachev.
Evgeniy Zyubin.
Roman Tsurkanu.
Aleksei Gagarin.
Dmitry Derepko.
Alexander Nekrasov.
yiiliveext.
Sergei Predvoditelev.
mj4444ru.
Michael Härtl.
Vitalii Shkolin.
Insolita.
Leonid Chernenko.
Anton Samoylenko.
Mister 42.
Evgeniy Tkachenko.
Julian Schmidt.
Artur Avdonin.
l317crew.
Arman Poghosyan.
Dmitry Naumenko.
Andrii Dembitskyi.
Alexey Gevondyan.
Milen Hristov.
Sagittaracc.
Marko Kaznovac.
kriptonuz.