Хроники Yii3
625 subscribers
43 photos
1.7K links
Описание процесса разработки фреймворка из первых рук 😎

Обсуждение:
https://yangx.top/yii3ru

Сводка по всем пакетам:
https://www.yiiframework.com/status/3.0

Поддержать разработчиков:
https://opencollective.com/yiisoft
加入频道
⚡️#yiisoftFactory

Небольшие улучшения в Yii Factory (PR):

• добавлена поддержка всех существующих версий psr/container (^1.0|^2.0);

• уровень стабильности зависимостей (minimum-stability) повышен до стабильного.
⚡️#yiisoftMiddlewareDispatcher

Провели замеры производительности Yii Middleware Dispatcher (см. PR). Оказалось, что в текущей реализации серьёзно течёт память. Нашли несколько узких мест и исправили проблему.

• В публичном методе MiddlewareDispatcher::withMiddlewares() перед $new->stack = null; добавили unset($new->stack);. Это позволяет удалять стек сразу, не дожидаясь сборщика мусора.

• В приватном методе MiddlewareDispatcher::buildMiddlewares() заменили использование динамической функции на статическую, что пусть немного, но улучшило производительность.

Исследования вопроса производительности продолжаются, возможно будут ещё изменения и более правильные решения.
⚡️#yiisoftMiddlewareDispatcher

Причесали Yii Middleware Dispatcher (PR):

- финализировали классы тестов;
- обновили dev-зависимости;
- исключили все служебные файлы при создании архива репозитория;
- немного улучшили конфигурации GitHub Workflow и других служебных файлов.
⚡️#yiisoftYiiBulma

Причесали Yii Bulma (PR):

- финализирован класс Breadcrumbs;
- aктуализированы версии зависимостей;
- в тестах yiisoft/di заменён на yiisoft/test-support;
- исправлены ошибки psalm;
- улучшена конфигурация psalm.
⚡️#yiisoftFactory

Финализировали и улучшили описание класса Normalizer в пакете Yii Factory (PR).
⚡️#yiisoftFactory

Изменено исключение в Yii Factory, выбрасываемое при попытке создать объект несуществующего класса (PR): вместо ReflectionException теперь выбрасывается Yiisoft\Factory\Exception\NotFoundException.
⚡️ #yiisoftFactory

Ещё немного улучшений в Yii Factory (PR):

- удалён публичный метод ArrayDefinition::mergeConstructorArguments();
- метод Factory::getDefinition() помечен как приватный;
- мелкие изменения в сообщениях исключений и phpdoc;
- добавлены новые тесты.
⚡️ #yiisoftYiiBulma

Навели порядок в Yii Bulma (PR):

- подчистили код, улучшили описания в phpdoc;
- актуализировали и доработали документацию;
- исключили все служебные файлы при создании архива репозитория;
- улучшили конфигурации GitHub Workflow и другие служебные файлы.
⚡️ #yiisoftYiiWidgets

Доработали виджеты из пакета Yii Widgets (PR).

• Добавили иммутабельность для всех виджетов.

• Изменения в методах виджета Breadcrumbs:
- encodeLabels()withoutEncodeLabels()
- homeLink()withoutHomeItem() + homeItem()
- links()items()

• В виджете ContentDecorator метод params() переименован в parameters().
⚡️ #yiisoftYiiWidgets #yiisoftYiiBulma

В виджетах "Хлебные крошки" из пакетов Yii Widgets (PR) и Yii Bulma (PR) внесены изменения в публичные методы, касающиеся элемента "домашняя страница".

• Удалён метод Breadcrumbs::withoutHomeItem();

• В метод Breadcrumbs::homeItem() разрешено передавать null (при передаче пустого массива будет вызвано исключение).
⚡️ #yiisoftYiiWidgets

Добавили документацию к пакету Yii Widgets (PR) и почистили код (PR):

- вместо yiisoft/event-dispatcher в dev-зависимостях теперь используется yiisoft/psr-dummy-provider;
- уровень psalm повышен до 2;
- добавлено ещё немного тестов;
- улучшены описания в phpdoc;
- исключены все служебные файлы при создании архива репозитория;
- улучшены конфигурации GitHub Workflow и другие служебные файлы.
⚡️ #yiisoftYiiBootstrap5

В пакете Yii Bootstrap 5 удалён класс BootstrapIconsAsset и зависимость от npm-asset/bootstrap-icons (PR).

В Bootstrap 5 выделили иконки в отдельный независимый пакет Bootstrap Icons. Сам Bootstrap 5 может использовать как Bootstrap Icons, так и любой другой набор иконок.
⚡️ #yiisoftDocs

Исправлены опечатки и битые ссылки в документации (PR, PR, PR).

Спасибо Toir Tuychiev за пул-реквесты 👍
⚡️ #yiisoftRouter #yiisoftRouterFastroute

В Yii Router изменён класс Group, реализующий работу с группой роутов (PR).

Group теперь реализует новый интерфейс GroupInterface.

• Все публичные методы Group сделаны иммутабельными.

• Создан отдельный класс RouteCollector, реализующий интерфейс коллекции роутов RouteCollectorInterface.

• Увеличено покрытие кода тестами.

Соответствующие изменения внесены в Yii Router FastRoute Adapter (PR).
⚡️ #yiisoftView

В пакете Yii View финализированы классы (PR):

- Yiisoft\View\Event\WebView\BeforeRender
- Yiisoft\View\Event\WebView\BodyBegin
- Yiisoft\View\Event\WebView\BodyEnd
- Yiisoft\View\Event\WebView\PageBegin
- Yiisoft\View\Event\WebView\PageEnd
- Yiisoft\View\Exception\ViewNotFoundException
⚡️ #yiisoftData

В пакете Yii Data исправлена ошибка в работе iterable-процессоров, приводящая к выбрасыванию исключения при проверке несуществующего поля (PR).

В рамках этого же пул-реквеста исправлены ошибки статического анализа psalm.
⚡️ #yiisoftDocs

Внесены небольшие правки в документацию по роутингу (PR).
⚡️ #yiisoftFactory #yiisoftDi #yiisoftDb

Удалена реализация фабрикой из Yii Factory интерфейса ContainerInterface (PR), соответственно удалены методы Factory::get() и Factory::has().

Теперь фабрика предоставляет только три публичных метода:

Factory::create() — создание объектов;
Factory::set() — установка дефинишена;
Factory::setMultiple() — массовая установка дефинишенов.

К этим изменениям потребовалось также адаптировать пакеты Yii Dependency Injection (PR) и Yii DB (PR).
⚡️ #yiisoftRequirements

В пакете Yii Requirements Checker обновлены dev-зависимости:

- roave/infection-static-analysis-plugin до ^1.9 (PR),
- vimeo/psalm до ^4.8 (PR).
⚡️ #yiisoftFactory #yiisoftWidget

В пакете Yii Factory удалён интефейс FactoryInterface (PR).

Интерфейс имел только одну реализацию в виде самой фабрики Yiisoft\Factory\Factory, других реализаций не подразумевалось, поэтому интерфейс не нужен.

Интерфейс использовался в фабрике из пакета Yii Widget, но здесь удалось его убрать небольшим рефакторингом (PR).
⚡️ #yiisoftHtml

Для тегов из Yii HTML разрешено передавать null в методы (PR):

- Tag::class(),
- Tag::replaceClass(),
- BooleanInputTag::label(),
- BooleanInputTag::sideLabel().

Важно понимать отличие null и пустой строки. Это очень разные по своей сути значения. null обозначает отсутствие чего-либо, а пустая строка — существование, но с пустым значением.

Примеры:

// <br>
echo Br::tag()->class(null);

// <br class="">
echo Br::tag()->class('');

// <input type="checkbox">
echo Checkbox::tag()->label(null);

// <label><input type="checkbox"></label>
echo Checkbox::tag()->label('');