Новости Yii 2021, выпуск 1

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

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

Это первый выпуск новостей в 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

Пакет был значительно переработан. Главных изменений два:

  1. Вывод по умолчанию экранируется.

  2. Теги реализованы как отдельные объекты, создаваемые через статические методы-фабрики из 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.

Источник: https://habr.com/ru/post/545616/


Интересные статьи

Интересные статьи

Недавно прошла очередная, зимняя защита выпускников трёх наших технопроктов — Технопарка (МГТУ им. Баумана), Техносферы (МГУ им. Ломоносова) и Технотрека (МФТИ). Команды представили как реали...
Если в вашей компании хотя бы два сотрудника, отвечающих за работу со сделками в Битрикс24, рано или поздно возникает вопрос распределения лидов между ними.
Сегодня мы публикуем историю перехода в IT Андрея Вуколова. Детское увлечение космосом когда-то привело его на ракетостроение в МГТУ. Суровая реальность заставила забыть о мечте, но все обернул...
Представляю Вашему вниманию перевод публикации о новой версии всеми любимого языка программирования Rust. Введение Команда по разработке языка программирования Rust рада анонсировать новую верс...
У флагманского смартфона появилась версия вдвое дешевле, сохранившая всё ту же потрясающую камеру. В семействе умных устройств Google Home — и пополнение, и перебрендирование. В Android Q про...