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

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

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

Поддержать разработчиков:
https://opencollective.com/yiisoft
加入频道
⚡️ #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('');
⚡️ #yiisoftWidget

Фабрика виджетов WidgetFactory из Yii Widget вместо наследования от Yiisoft\Factory\Factory теперь использует композицию (PR).

Это позволит в дальнейшем финализировать класс Yiisoft\Factory\Factory.
⚡️ #yiisoftFactory

Фабрика из Yii Factory при разрешении ссылок (Reference) теперь не использует контейнер (PR).

Пример:

$factory = new Factory(
new SimpleContainer([
EngineInterface::class => new EngineMarkOne(),
]),
[
'engine' => Reference::to(EngineInterface::class),
]
);

$engine = $factory->create('engine');

До PR фабрика не находила EngineInterface в своих дефинишенах и получала его из контейнера, после PR фабрика никогда не ищет ссылки (Reference) в контейнере и в примере вызовет исключение NotInstantiableException.

Таким образом контейнер используется только для разрешения зависимостей.
⚡️ #yiisoftYiiBulma

Продолжаем наводить красоту в Yii Bulma (PR):

• Переименованы методы:
Nav::withoutActivateItems()Nav::deactivateItems()
Tabs::withoutActivateItems()
Tabs::deactivateItems()

• Много улучшений в Doc-блоках.
⚡️ #yiisoftYiiBulma

Обновлены версии зависимостей в Yii Bulma:

- npm-asset/vizuaalog--bulmajs до ^0.12.1 (PR),
- npm-asset/bulma-helpers до ^0.4.0 (PR).
⚡️ #yiisoftFactory

Улучшения в пакете Yii Factory (PR):

- финализированы все классы;
- добавлены ещё несколько тестов;
- немного почищен код;
- обновлены dev-зависимости.
🎁 #yiisoftEventDispatcher #Патч

Патч-релиз диспетчера событий Yii Event Dispatcher 1.0.1 (PR).

• Добавлена поддержка слушателей с объединённым типом события.

Например:
$listenerCollection->add(
static function (EventA|EventB $event): void {}
);

• В методе ListenerCollection::add() добавлена возможность добавлять одного слушателя сразу к нескольким событиям.

Например:
$listenerCollection->add(
$listener,
EventA::class,
EventB::class
);

Спасибо @ncou за обнаруженную ошибку с объединённым типом события.
⚡️ #yiisoftWidget

В виджете Menu (пакет Yii Widget) в публичных методах Menu::currentPath(), Menu::firstItemCssClass() и Menu::lastItemCssClass() в качестве аргумента запрещено передавать null, можно передавать только строку (PR).

+ Небольшие улучшения в doc-блоках.
⚡️ #yiisoftDi

В пакете Yii Dependency Injection удалён контекстный контейнер, так как нигде не используется (PR).
⚡️ #yiisoftYiiDevTool

В инструменте для разработки Yii Dev Tool пакеты теперь обрабатываются в алфавитном порядке (PR).
⚡️ #yiisoftYiiSentry

Первый строчки кода в пакете Yii Sentry (PR): реализована мидлварь для перехвата исключений и добавлена конфигурация контейнера.
⚡️ #yiisoftPackageTemplate

В пакете-шаблоне Yii Package Template подготовили конфигурации GitHub Actions для ежедневного запуска (PR).

Это позволит оперативно узнавать о том, что в пакете что-то сломалось из-за изменений в зависимостях.
⚡️ #yiisoftProxy

В пакете Yii Proxy исправлена ошибка с некорректным проксированием исключений, что в некоторых случаях приводило к дублированию текста ошибки (PR).

Спасибо @mahmud128 за обнаруженную проблему.
⚡️ #yiisoftYiiDevTool

В Yii Dev Tool добавлен пакет Yii Sentry (PR).
⚡️ #yiisoftFactory

В пакете Yii Factory из конфигурации автодополнения для PhpStorm (файл .phpstorm.meta.php) удалены настройки для удалённого ранее метода Factory::get() (PR).