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

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

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

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

В пакете-шаблоне Yii Package Template улучшен шаблон сообщения к пул-реквесту на GitHub (PR): закомментирована строка с инструкцией по заполнению поля «исправленные проблемы».
⚡️ #yiisoftApp #yiisoftAppApi

В шаблонах приложений Yii Application Template (PR) и Yii API Template (PR) конфигурация PSR-17 (фабрики HTTP-объектов) перенесена из web-конфигурации в общую конфигурацию, так как эти фабрики могут потребовать везде, где используется HTTP-клиент, а он требуется не только в web-приложении, но, в некоторых случаях, и в консольных командах.
⚡️ #yiisoftYiiSentry

В пакете Yii Sentry добавлен перехват исключений в консольном приложении (PR).
⚡️ #yiisoftFactory

В Yii Factory добавлены дополнительные тесты (PR).

В процессе разработки фабрики и контейнера зависимостей большинство тестов были сделаны именно в контейнере. В рамках этого пул-реквеста добавили много аналогичных тестов для фабрики. Помимо увеличения покрытия кейсов использования тестами, это позволило выявить несколько проблем в фабрике (см. issues).
⚡️ #yiisoftFactory

В Yii Factory для метода Factory::create() добавлены psalm-аннотации, позволяющие анализатору понять тип возвращаемого объекта, если в качестве конфигурации передано имя класса (PR).

Например:

// return instance of class "Car"
$factory->create(Car::class);

// return mixed
$factory->create(['class' => Car::class]);

// return mixed
$factory->create('car');
⚡️ #yiisoftProxy

В пакете Yii Proxy откатили PR, который исправлял ошибку с некорректным проксированием исключений. Решение подразумевало клонирование объекта-исключения, но оказалось это вызывает ошибку. Будем думать как сделать по другому.
⚡️ #yiisoftView

В пакете Yii View в методах View::getCommonParameter() и WebView::getCommonParameter() добавлена поддержка второго параметра, задающего значение "по-умолчанию" (PR).

При этом если значение "по-умолчанию" не передано, а запрашиваемый параметр не существует, то будет выброшено исключение InvalidArgumentException.

Примеры:

$view->setCommonParameters([
'name' => 'Vasya',
]);

// return "Vasya"
$view->getCommonParameter('name');

// return "Vasya"
$view->getCommonParameter('name', 'Kolya');

// throw InvalidArgumentException
$view->getCommonParameter('age');

// return 42
$view->getCommonParameter('age', 42);