Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!
Всем привет!
Почти три месяца прошло с последнего выпуска новостей. От нас почти ничего не было слышно. Мы работали. После расширения команды Yii 3 я больше занимаюсь управлением, ревю, проектированием и обсуждениями, чем непосредственно кодом. Получается неплохо. В общем темп ускорился, и мы всё ближе к нашим целям.
Активность на официальном форуме и форуме yiiframework.ru стала совсем низкой если сравнивать со временами Yii 1 и Yii 2. Сообщество перешло в разные социальные сети и чаты.
Я думаю, что такая миграция — это плохо. В соцсетях и чатах практически невозможно найти предыдущие ответы. Одни и те же вопросы повторяются практически каждый день и ответы не оседают в поиске. Почти уверен, что тот, кто первым начнёт собирать вопросы и ответы и публиковать их как статьи в wiki или посты в блоге, станет довольно популярным.
А теперь перейдём к тому, что же интересного случилось с последнего выпуска.
Yii 1
Со мной связались Onetwist Software и предложили добавить поддержку PHP 8 в Yii 1.1 в обмен на пополнение фонда Yii (из которого мы частично финансируем Yii 3). В итоге в master версии 1.1 теперь есть поддержка PHP 8. Релиза пока не было. Ждём баг-репортов. Также:
- Пайплайны перетащили с TravisCI на GitHub actions.
- Тесты запускаются на версиях от PHP 5.3 до PHP 8.0. Пришлось пропатчить старый PHPUnit, но в итоге всё заработало. Части патча пригодятся и для Yii 2.
Из других новостей Yii 1.1, Marco van 't Wout, давний пользователь Yii, вызвался разбирать тикеты и, вероятно, неофициально поддерживать Yii 1.1 после планируемого окончания поддержки. Посмотрим как пойдёт...
Yii 2
- Yii 2.0.37. Улучшено дополнение в PhpStorm и отображение исключений в консольных приложениях в режиме отладки.
- Yii 2.0.38. Поддержка PHP 8. Поддержка последних версий баз данных. Фикс на тему безопасности.
- ElasticSearch 2.1.0. Поддержка версий с 5 по текущую 7.
- ApiDoc 2.1.5. Фиксы для совместимости с PHP 7.
- Документация к Yii и расширениям в различных форматах.
Мы постепенно переводим шаблоны приложения и расширения Yii 2 на GitHub actions. Это позволит нам нормально работать над будущими релизами.
Yii 3
2020 год не прост и много чего идёт не по плану. Вероятно, сдвинутся предполагаемые даты релиза, о которых я уже несколько раз неосторожно заявил. Тем не менее, публичный API меняется всё меньше, и значительная часть кода направлена на исправление ошибок и мелкие доработки, а не на перепроектирование API. Конечно, некоторые части, включая конфигурацию,
всё ещё сильно меняются. Конфигурацией я пока не вполне доволен.
Команда выпустила стабильные версии некоторых пакетов. Все они фреймворко-независимые и могут быть использованы в любом PHP-приложении:
- Access 1.0.0.
- Auth 1.0.0.
- JSON 1.0.0.
- Injector 1.0.2.
- Strings.
- HTTP 1.0.0.
Готовятся и другие релизы.
Ниже разберём интересные изменения и дополнения.
Тесты и причёсывание
- PHP 8 был добавлен как поддерживаемая версия в
composer.json
всех пакетов. Большинство уже совместимы, но пока не все. - После довольно длительного использования phan мы переходим на Psalm. Он более популярный и поддерживается PhpStorm.
- Для многих пакетов реализованы дополнительные тесты, во многих пакетах тесты значительно улучшены на основе результатов мутационного тестирования через Infection. Вместе с общей зачисткой исправлено значительное количество ошибок.
- Был создан пакет для поддержки тестов. Сейчас он используется командой Yii 3 для самого фреймворка, но, вероятно, его можно будет использовать и в своих приложениях.
Пакеты
- Был создан пакет yiisoft/yii-event. Он предоставляет конфигуратор для событий и используется как в веб-приложении, так и в консоли.
Для конечного пользователя это выражается, прежде всего, в том, что зависимости автоматически подставляются в обработчики событий. - Пакет data response был выделен из yii-web. Он даёт возможность отвечать сырыми данными, которые форматируются в XML, JSON и т.д. позже.
- Появился новый пакет request body-parser. В нём middleware для разбора тела запроса в зависимости от content-type.
- Доработан пакет Bulma. Сейчас он используется для оформления шаблона приложения по умолчанию.
- Главный пакет очередей практически стабилизировался. Готова начальная реализация драйвера для AMQP.
- Улучшена структура пакета валидации.
- В интеграции с Cycle ORM появилась команда
cycle/schema/clear
и фильтруемый data reader. - Продолжается зачистка слоя абстрации над базами данных и его драйверов. Выглядят пакеты всё лучше. Очень вероятно, что они будут готовы к релизу основного фреймворка.
- В роутере реализовано сопоставление по хосту.
- В диспетчере событий заменили подход с friendly-классом на более понятный.
- В формах теперь поддерживаются вложенные атрибуты (через разделитель-точку).
- Cookies переехали из yii-web в отдельный пакет.
- На основе применения с Cycle ORM почищены интерфейсы в пакете data.
- В пакет arrays добавлены дополнительные модификаторы. Плюс он подвергся лёгкому рефакторингу и был покрыт дополнительными тестами.
- Роутер стал более гибким. Появилась возможность заменить то, как запускается совпавший маршрут.
- Конфигурацию валидатора теперь можно экспортировать в виде массива. Это полезно для сериализации правил в JSON и передачу фронтенд-части для клиентской валидации.
- В пакете по работе с файлами появилась возможность очистить директорию не удаляя её.
- CSRF переехал в отдельный пакет из yii-web и прилично изменён.
- То же произошло с сессиями.
- В пакет миграций добавлен интерфейс RevertibleMigrationInterface.
- Из Yii 2 портирован слой для работы с Redis.
- Улучшен сбор отладочных данных. API отладчика практически готов. В процессе разработки черновая версия просмотрщика данных на Angular в процессе. Нам всё ещё предстоит придумать, как удобно реализовать предоставление панелей сторонними пакетами, но, в остальном, всё двигается неплохо.
- Готов план по изменению архитектуры перевода сообщений. Реализация в процессе.
Демо приложение и шаблон приложения
- Расширено и отрефакторено демо приложение. Оно уже ближе к тому, как должно выглядеть приложение, но некоторые хорошие решения из yiisoft/app всё ещё не применены. Верно и обратное.
- Для yiisoft/app в качестве реализации PSR-7 и PSR-17 мы пробуем httpsoft/http-message вместо nyholm/psr7. Причина — производительность.
- Мы начали менять Composer config plugin и стало понятно что текущая архитектура должна быть переосмыслена. Реализация в процессе.
Основные задачи, над которыми мы работаем, показаны на доске в Trello. Там есть и те, которых нет на GitHub. Например, редизайн страницы ошибки.
Если хотите присоединиться к разработке, пишите мне в почту, на форум, в Telegram или по любому другому каналу.
Команда
Команда ещё выросла. Текущий состав есть на сайте:
- Paweł Brzozowski присоединился помогать с тикетами Yii 2.
- Сергей Предводителев присоединился к разработке Yii 3.
Также на страницу был добавлен Дмитрий Дерепко. На самом деле над Yii 3 он работает уже не мало, а вот на страницу мы как-то забыли его добавить :)
Новые и переработанные внутренние соглашения:
- Packages.
- Code style.
- Tests.
Обновлённые страницы в руководстве по фреймворку:
- Middleware
- Actions
- Using Yii with Swoole — руководство ещё не полное.
- Handling errors.
Другие новости
- На YiiPowered уже 597 проектов. Если вы не добавили свои — добавляйте. Можете даже не загружать скриншоты. Они подтянутся с реального сайта ночью.
Рекомендации к чтению
- Улучшения покрытия PHP кода в 2020 году.
- PHP friendly классы.
- Optimize Images with a GitHub Action.
️ Спасибо!
Хочу сказать спасибо всем спонсорам и разработчикам, благодаря которым стала возможна разработка Yii 3. Вместе у нас всё получится.
Отдельное спасибо тем, кто помог Yii 3 кодом:
- Wilmer Arambula.
- Alexander Nekrasov.
- Dmitry Derepko.
- Viktor Babanov.
- Rustam Mamadaminov.
- wiperawa.
- yiiliveext.
- Roman Tsurkanu.
- Mister-42.
- Maksym Storchak.
- Alexey Kopytko.
- Sergei Predvoditelev.
- Dmitriy Gritsenko.
- Anton Samoylenko.
- Arman Poghosyan.
- Leonid Chernenko.
- Andrii Vasyliev.
- Yuriy Mamaev.
- DarkDef.
- Aleksei Gagarin.
- Michael Härtl.
Также спасибо Ihor Sychevskyi за улучшения сайта yiiframework.com.