Привет, сообщество!
Это первый выпуск новостей в 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
Прежде всего, релизы:
В каждом пакете есть документация, отличное покрытие тестами, код вычищен и, конечно же, публичное API достаточно стабилен.
Ну а теперь время рассмотреть интересные изменения с предыдущего выпуска новостей. Для удобства изменения сгруппируем по пакетам.
Arrays
-
Добавлен
ArrayHelper::pathExists()
. -
Добавлен
ArrayHelper::group()
. Это алиасArrayHelper::index()
. -
Удалены модификаторы.
Data
-
В
PaginatorInterface
и реализации добавленgetSort()
. -
Класс Sort теперь инстанциируется через статические методы-конструкторы, меняющие режим работы.
Auth
-
IdentityRepositoryInterface::findIdentityByToken()
был выделен вIdentityWithTokenRepositoryInterface
. Также, теперь можно настроить токен.
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 это дополняют и проверяют.
Валидатор
Много рефакторинга. Самое интересное:
-
Возможность определять правила валидации прямо в валидируемом объекте.
-
Можно валидировать любые данные, не обязательно DataSetInterface.
Формы
-
Атрибут "required" теперь добавляется к input-ам на основе правил валидации.
-
Из-за изменений в валидаторепоменялся способ валидации форм.
Перевод сообщений
Почти готов к релизу. Можете почитатьего readme.
Mailer
Mailerиадаптер для SwiftMailerбыли вычищены и отрефакторены. Добавлена документация. Релизнем как только будут готовы зависимости.
DB и ActiveRecord
В обоих пакетах были исправления, оба ещё больше покрыли тестами. Wilmer, член команды, который занимался этими пакетами, уже проверил из в бою на Telegram боте с 120 тысячами запросов в сутки.
Оба пакета изначально были портированы из Yii 2 почти как есть. Была убрана магия, добавлены типы, покрытие тестами доведено почти до 100%. Но, несмотря на то что пакеты стали даже лучше, чем Yii 2, дизайн сохранился примерно в том же виде. Нам предстоит трудный выбор, релизить ли первую версию как есть или же сначала затеять гигантский рефакторинг.
Скорее всего выберем первое.
yii-web
User
Значительно переделали пакет:
Всё ещё не до конца довольны. Скорее всего будем переделывать ещё.
Bootstrap и Bulma
-
Убили пакет Bootstrap 4.
-
Все методы конфигурации сделали иммутабельными.
-
Оба пакета адаптированы к изменениям в пакете HTML.
Консоль
Появиласьвозможность добавлять команды со своим именем.
Debugger
Есть прогресс как в API, так и на фронтенде.
-
Сбор данных стал ещё более стабильным.
-
Начали собирать данные с роутера.Для этого используется container proxy, что позволило совсем не менять сам пакет роутера.
-
На фронтенде добавили сортировку в списке запросов.
Docker
Инструментарий разработки фреймворка
Улучшилиинструментарийчтобы можно было
удобно работать даже не поставив все пакеты. Улучшили точность
фиксера зависимостей. Добавили новую
командыrelease/what
. Она подсказываем какой пакет
релизить следующим. Приоритет отдаётся пакетам без нестабильных
зависимостей и, при этом, блокирующих как можно больше релизов
других пакетов.
Шаблоны приложений
-
Применили новый yiisoft/config.
Новая и обновлённая документация
Почитать-посмотреть
Спасибо!
Хочу сказать спасибо всем спонсорам и разработчикам, благодаря которым стала возможна разработка Yii 3. Вместе у нас всё получится.
Я понял, что ранее не писал о компаниях, которые поддерживают разработку Yii. Вот самые большие спонсоры с коротким описанием:
-
CraftCMS- Отличная OpenSource CMS на Yii2.
-
Onetwist Software- Услуги качественной разработки приложений.
-
SkillShare- Обучение новым навыкам.
-
Betteridge- Ювелирные изделия.
-
dmstr- Облачные решения на основе Docker.
-
HumHub- OpenSource решения для общения команды.
-
JetBrains- Отличные инструменты для разработки.
-
Skin.Club- Рынок скинов для CS:GO.
-
ЭФКО- фудтех, производство продуктов питания, и венчурные инвестиции. С недавнего времени ещё и ЭФКО-тех, отдельная растущая сервисная IT-компания, которая планирует заниматься не только внутренними проектами ЭФКО.
Кроме перечисленных нас поддерживаютотдельные разработчики и другие компании.
Отдельное спасибо тем, кто помог Yii 3 кодом: