Привет, сообщество! Это первый выпуск новостей в 2021. Начало года вышло продуктивным. Мы начали активно релизить пакеты Yii 3, есть значительный прогресс с пока не релизнутыми пакетами. Улучшили инструментарий разработки, много всего исправили, убили лишние пакеты. И всё это параллельно с поддержкой Yii 2 и решением проблем с финансированием. Несмотря на то, что 2020 был через край долбанутым, для Yii всё вышло неплохо. Удалось договориться о продлении поддержки Yii 1.1 и других вещах в обмен на единовременное или постоянное пополнение фонда. Эти соглашения и, конечно же, наши любимые спонсоры, позволили команде меньше работать над коммерческими проектами и больше над фреймворком. Фонд удалось использовать полностью. Я был чрезвычайно воодушевлён возросшей скоростью разработки, окунулся в неё с головой и немного подзабыл о финансовой части. В январе меня ждал неприятный сюрприз. Оказывается, что забыл я про очень важный факт. А именно, что немаленькая часть средств фонда поступила не рекуррентными платежами. Соответственно, бюджета на всё не хватило. Чтобы не случилось полной катастрофы, я перестал забирать деньги фонда с OpenCollective и начал активно искать партнёров среди компаний, которые используют Yii и PHP. Результаты пока спорные, но, надеюсь, всё наладится. Если хотите пообщаться на тему партнёрства, пишите в sam@rmcreative.ru. Вышел Yii 2.0.41. Сильно помогли с релизом Paweł Brzozowski, недавно присоединившийся к команде Yii 2, и Robert Korulczyk с его тщательными ревью всего вливаемого в master кода. Много часов было потрачено на безопасность фреймворка. Удалось перебрать текущие сообщения о предполагаемых уязвимостях и улучшить безопасность. Прежде всего, релизы: 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 достаточно стабилен. Ну а теперь время рассмотреть интересные изменения с предыдущего выпуска новостей. Для удобства изменения сгруппируем по пакетам. Добавлен ArrayHelper::pathExists(). Добавлен ArrayHelper::group(). Это алиас ArrayHelper::index(). Удалены модификаторы. Добавлен DeletableInterface. В PaginatorInterface и реализации добавлен getSort(). Класс Sort теперь инстанциируется через статические методы-конструкторы, меняющие режим работы. IdentityRepositoryInterface::findIdentityByToken() был выделен в IdentityWithTokenRepositoryInterface. Также, теперь можно настроить токен. Был отрефакторен пакет аутентификации JWT. После большого количества попыток улучшить Composer config plugin стало очевидно что он стал слишком сложным: AST, мёрж конфигов и всё что там творилось под капотом. Мы приняли решение сделать его менее зависимым от пакетов yiisoft и сделать новый, более простой и производительный, пакет. Все шаблоны приложений уже были переведены на новые конфиги. Скорее всего нужно будет исправлять баги и повышать удобство использования пакета. Рефакторинг, ридми. Поддержка Xdebug 3 для получения более подробных стектрейсов. ExceptionResponder, при помощи которого можно формировать HTTP-ответ в зависимости от пойманной ошибки. Это может быть полезно для исключений вроде NotFoundException. Будут ли такие исключения из коробки пока обсуждаем. Renderer-ы теперь могут отдавать HTTP-заголовки, добавлен renderer, который выводит ошибку в заголовках. Полезно если показывать ошибки текстом неудобно. Например, для некоторых API или при генерации картинок. Элементы stacktrace для классов из vendor теперь отображаются отдельной группой и по умолчанию свёрнуты. Так как ошибки обычно в самом приложении, это позволяет не отвлекаться на нерелевантную информацию. В пакет yiisoft/yii-event добавлен режим отладки. В нём проверяются все обработчики событий сразу. Улучшены ошибки DI контейнера. Добавлен NumericHelper::isInteger(). Добавлена поддержка bool в NumericHelper::normalize(). Был переработан матчинг по wildcard. Вместо довольно большого количества опций добавили **, совпадающий, в том числе, с сепараторами. Улучшена поддержка PHP 8. VarDumper::dump() теперь, по умолчанию, подсвечиваем код. Удалён VarDumper::asPhpString(). Весь специфичный для Yii debugger код был перенесён в сам пакет. Покрыты все найденные интересные случаи при экспорте замыканий. При установке пакета становятся автоматически доступны d() и dd(). Пакет был значительно переработан. Главных изменений два: Вывод по умолчанию экранируется. Теги реализованы как отдельные объекты, создаваемые через статические методы-фабрики из Html. Для пользователя это значит, что конфигурация теперь производится через вызов методов. То есть теперь IDE это дополняют и проверяют. Много рефакторинга. Самое интересное: Из Rule выделены интерфейсы. Из Validator убрано состояние. Реализована валидация вложенных структур. Улучшена реализация перевода ошибок Возможность определять правила валидации прямо в валидируемом объекте. Можно валидировать любые данные, не обязательно DataSetInterface. Правило InRange разделено на InRange и Subset. Атрибут "required" теперь добавляется к input-ам на основе правил валидации. Из-за изменений в валидаторе поменялся способ валидации форм. Почти готов к релизу. Можете почитать его readme. Mailer и адаптер для SwiftMailer были вычищены и отрефакторены. Добавлена документация. Релизнем как только будут готовы зависимости. В обоих пакетах были исправления, оба ещё больше покрыли тестами. Wilmer, член команды, который занимался этими пакетами, уже проверил их в бою на Telegram боте с 120 тысячами запросов в сутки. Оба пакета изначально были портированы из Yii 2 почти как есть. Была убрана магия, добавлены типы, покрытие тестами доведено почти до 100%. Но, несмотря на то что пакеты стали даже лучше, чем Yii 2, дизайн сохранился примерно в том же виде. Нам предстоит трудный выбор, релизить ли первую версию как есть или же сначала затеять гигантский рефакторинг. Скорее всего выберем первое. Middleware теперь иммутабельны. Значительно переделали пакет: Один Два Три Всё ещё не до конца довольны. Скорее всего будем переделывать ещё. Убили пакет Bootstrap 4. В Bootstrap добавили виджет Toast. В Bulma добавили виджет Panel Все методы конфигурации сделали иммутабельными. Оба пакета адаптированы к изменениям в пакете HTML. Появилась возможность добавлять команды со своим именем. Есть прогресс как в API, так и на фронтенде. Сбор данных стал ещё более стабильным. Начали собирать данные с роутера. Для этого используется container proxy, что позволило совсем не менять сам пакет роутера. Добавлена консольная команда для сброса собранных данных. На фронтенде добавили сортировку в списке запросов. Добавлена поддержка 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. PHP, Yii