Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!
Приветствую!
Время очередного выпуска новостей Yii. Как у Yii 2, так и у Yii 3 всё хорошо :)
На самом деле, в этом году перед этим выпуском было ещё четыре, как следует из порядкового номера. Но я был так увлечён Yii 3, что забыл про хабр… Почитать их можно прямо на главной https://yiiframework.ru/. Ну или, если больше нравится английский, на нашей странице на OpenCollective.
Наконец, дошли руки обновить страницу с командой на официальном сайте.
Константин Сироткин вернулся и активно занимается расширением Yii 2 ElasticSearch.
Сформирована основная команда Yii 3. Вообще это по факту произошло в конце 2019-го. Имена, вероятно, вам известны так как упоминались в предыдущих выпусках.
Мы частично переместили тесты на GitHub actions. Полёт прекрасный, рекомендуем. Мы добавляем статический анализ через phan
и прогоняем тесты через Infection чтобы ещё больше повысить качество кода.
Я потратил немного времени на YiiPowered, где мы собираем проекты на Yii. Сейчас там 571 проект. Улучшения такие:
- Можно добавлять проекты на Yii 3.0.
- Для проектов, для которых не заполнены скриншоты, они делаются и загружаются автоматически каждую ночь.
В прошлом выпуске я упомянул конференцию PHP Russia Online.
Прошла она хорошо. Доступны видео.
В качестве эксперимента, я записал скринкаст во время работы над фреймворком.
Очень хочется узнать ваше мнение. Стоит писать ещё? Хотите узнать про какую-то часть фреймворка или процесс разработки?
Yii 2
Вышла версия 2.0.36. Это важное обновление из-за улучшений в работе
DI-контейнера. Он стал немного ближе к Yii 3.
В action как веб, так и консольного контроллеров теперь можно так:
namespace app\controllers;
use yii\web\Controller;
use app\components\BookingInterface;
class HotelController extends Controller
{
public function actionBook($id, BookingInterface $bookingService)
{
$result = $bookingService->book($id);
// ...
}
}
Ещё одно улучшение в том, что Instance::of()
начал работать в массивах:
return [
ContentTypeMiddleware::class => [
'__construct()' => [
Instance::of(StreamFactory::class),
[
'json' => Intance::of(JsonFormatter::class),
'yaml' => Intance::of(YamlFormatter::class),
],
],
],
];
Дополнительно были выпущены следующие расширения:
- Composer installer 2.0.10 с улучшенной поддержкой Composer 2.
- ElasticSearch 2.0.6
и 2.0.7 с фиксами "legacy" релизов.
Yii 3
Во-первых, появился шаблон приложения. С него вы можете начать пробовать Yii 3.
Это не финальная версия, но представление о том, что у нас есть, даёт. Обсуждения и конструктивная критика приветствуются.
- Выпущена стабильная версия пакета Aliases со 100% покрытием
кода тестами, которые 100% чисты от мутаций. - Ещё одна версия Injector 1.0.1 добавила поддержку PHP 8.
- В yiisoft/form были добавлены виджеты форм и другие улучшения.
- Во многие пакеты добавлена строгая типизация.
- Улучшено покрытие тестами yiisoft/gii и yiisoft/yii-web.
- Был реализован auto-login middleware, который, вероятно, вы знаете как "remember me".
- В Composer config plugin улучшено покрытие тестами, стало возможно
делать ребилд конфига из кода без предварительной сборки. Также теперь генерируется меньше файлов и ограниченно поддерживаются
переменные окружения. Ну и, наконец, поддерживается Composer 2. - Стало возможно настроить HTML-страницу ошибки в ErrorHandler.
- В консольное приложение добавлены события
ApplicationStartup
иApplicationShutdown
и удобный способ на них подписываться
черезconfig/events-console.php
. На данный момент это используется в yiisoft/yii-debug.
Конфигурация в общем была приведена к новому стилю и стала более гибкой. - Реализован рендерер Twig.
- В yii-demo добавлена команда route/list.
- Пакет RBAC был отрефакторен. Также было реализовано хранилище в PHP файлах.
- В пакет arrays добавлен модификатор ReverseBlockMerge.
Он, главным образом, используется в конфигах приложения для правильного порядка обработчиков событий. - Реализован пакет миграций для баз данных.
- Сформировался стиль конфигурации. Он основан на сервис-провайдерах.
- Интеграция с Cycle ORM была почищена, был обновлён стиль конфигурации и добавлены дополнительные возможности.
В пакет HTTP добавлен класс Header
, содержащий константы для типичных заголовков HTTP.- Покрытие тестами в пакете Queue было увеличено. Также исправлены найденные ошибки.
- В yiisoft/yii-web добавлен middleware для редиректа на HTTPS.
- Yii development tool, инструмент, который мы используем для удобной разработки
Yii 3, был покрыт дополнительными тестами. Были реализованы новые возможности, такие какавтоматическое исправление
на основе исходного кода пакета
зависимостей в composer.json - Добавлен пакет Bootstrap 5.
- Контейнер зависимостей научился обрабатывать
Reference::to()
в массивах. - В контроллеры и формы добавлена автоматическая генерация ID на основе имени класса. Это упростит процесс конфигурирования.
- Реализован пакет интеграции с Bulma CSS framework. На данный момент он используется в шаблоне приложения.
- Есть прогресс по пакету yiisoft/yii-rest.
- В пакет data добавлен метод DataReaderInterface::readOne().
Общую картину можно наблюдать в Trello.
Новые и переработанные внутренние соглашения:
- 003 — Roadmap
- 013 — Code Review.
Новые страницы в руководстве по фреймворку:
- What is Yii.
- Installing Yii.
- Running Applications.
- Saying Hello.
- Working with Forms.
- Looking Ahead.
- Middleware.
- Configuration.
- Aliases.
- Routing and URL generation
- Authentication.
- Glossary.
- Начат перевод на китайский.
Рекомендации к чтению
- Vue.js in legacy Yii app
- Fresh Yii and extension manuals in various formats
- Yii2 & Doctrine ORM simple integration
️ Спасибо!
Хочу сказать спасибо всем спонсорам и разработчикам, благодаря которым стала возможна разработка Yii 3. Вместе у нас всё получится.
Отдельное спасибо тем, кто помог Yii 3 кодом:
- Wilmer Arambula.
- Rustam Mamadaminov.
- Dmitry Derepko.
- Martín Peveri.
- Hubert Strychalski.
- yiiliveext.
- Jakharbek.
- Aleksei Gagarin.
- Roman Tsurkanu.
- Alexander Nekrasov.
- skugarev.
- Andrii Dembitskyi.
- Viktor Babanov.
- Thoulah.
- Pavel Ivanov.
- Dmytro Naumenko.
- Andrii Vasyliev.
- wiperawa.
- Trevor.