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

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

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

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

В пакете Yii Dependency Injection исправлена критичная ошибка в бенчмарках (PR): замеры проводилось без получения зависимостей.
⚡️ #yiisoftMutex

В пакете Yii Mutex добавлен абстрактный класс Mutex (реализует MutexInterface), предоставляющий базовый функционал для создания драйверов (PR).
⚡️#yiisoftMutexPdoPgsql

Исправлена опечатка в имени исключения, вызываемого в случае неудачного снятия блокировки в пакете Yii Mutex Postgres PDO Driver (PR).

Спасибо Максиму Сторчаку за выявленную ошибку и PR 👍
⚡️ #yiisoftApp #yiisoftAppApi #yiisoftDemo #yiisoftDemoApi

В приложениях конфигурация начальной загрузки (bootstrap) разделена на общую, консольную и web-части:

- шаблон веб-приложения (PR),
- шаблон API-приложения (PR),
- демо веб-приложения (PR),
- демо API-приложения (PR).

Bootstrap представляет собой массив функций (точнее callable) вида function (ContainerInterface $container): void, которые последовательно будут вызваны при запуске приложения.
⚡️ #yiisoftFactory

Подчистили код ссылок (Reference) в Yii Factory (PR):

• Удалён метод Reference::getId() (нигде не использовался).

• Изменён тип результата в методах Reference::to() и DynamicReference::to() с ReferenceInterface на self.

• Улучшены описания в doc-блоках.
⚡️ #yiisoftDi #yiisoftDataResponse

В пакете Yii Dependency Injection добавлены хелперы ReferencesArray и DynamicReferencesArray для создания массива обычных (Reference) и динамических (DynamicReference) ссылок соответственно (PR).

Хелперы удобно использовать в конфигурациях. Так, в пакете Yii Data Response вынесли форматеры мидлвари ContentNegotiator в параметры, используя класс DynamicReferencesArray (PR).

Было:

// Конфигурация web.php
ContentNegotiator::class => [
'__construct()' => [
'contentFormatters' => [
'text/html' => new HtmlDataResponseFormatter(),
'application/xml' => new XmlDataResponseFormatter(),
'application/json' => new JsonDataResponseFormatter(),
],
],
],

Стало:

// Конфигурация web.php
ContentNegotiator::class => [
'__construct()' => [
'contentFormatters' => DynamicReferencesArray::from($params['yiisoft/data-response']['contentFormatters']),
],
],

// Параметры params.php
'yiisoft/data-response' => [
'contentFormatters' => [
'text/html' => HtmlDataResponseFormatter::class,
'application/xml' => XmlDataResponseFormatter::class,
'application/json' => JsonDataResponseFormatter::class,
],
],
⚡️ #yiisoftFactory

Небольшой рефакторинг в Yii Factory: в классе Factory приватное свойство $container переименовано в более логичное $dependencyResolver (PR).
⚡️ #yiisoftFactory

Несколько доработок в Yii Factory (PR):

• При разрешении зависимостей фабрика теперь не пытается передать null для параметров, которые не поддерживают его, а сразу кидает исключение. Аналогично будет работать в контейнере зависимостей, так как в этой части он использует код из Yii Factory.

• Исключение CircularReferenceException теперь наследуется от NotInstantiableException.

• Добавлено исключение NotInstantiableClassException.

• В GitHub Actions добавлен статический анализ в PHP 8.

На картинке изображена диаграмма классов исключений из пакета Yii Factory на данный момент.
⚡️ #yiisoftYiiDevTool

Доработан инструмент для разработки Yii Dev Tool: теперь его можно использовать для любого вендора, а не только для yiisoft (PR).
⚡️ #yiisoftMutex

В абстрактном классе Mutex (пакет Yii Mutex) финализирован деструктор (PR).
⚡️ #yiisoftMutexFile

В пакете Yii Mutex File Driver мьютекс теперь наследуется от абстрактного Mutex из основного пакета + настройки мьютекса перенесены из сеттеров в конструктор (PR).
⚡️ #yiisoftMutexPdoMysql

В пакете Yii Mutex MySQL PDO Driver мьютекс теперь наследуется от абстрактного Mutex из основного пакета + в работе драйвера удалена проверка с использованием MySQL-функции IS_FREE_LOCK() (PR).
⚡️ #yiisoftMutexPdoPgsql #yiisoftMutexPdoOracle

Навели порядок в пакетах Yii Mutex Oracle PDO Driver (PR) и Yii Mutex Postgres PDO Driver (PR):

- класс мьютекса наследуется от Mutex из основного пакета;
- подчищен код, улучшены doc-блоки;
- обновлены dev-зависимости;
- уровень psalm повышен до 1;
- добавлены тесты;
- в файле .editorconfig добавлена секция *.yml;
- исключены все служебные файлы при создании архива репозитория;
- актуализирован readme;
- улучшены конфигурация GitHub Workflow и другие служебные файлы.
⚡️ #yiisoftEventDispatcher

В пакете Yii Event Dispatcher при добавлении слушателя в коллекцию для случаев, когда не указан тип события в слушателе и когда слушатель не содержит события, выводятся разные сообщения об ошибке (PR).
⚡️ #yiisoftHtml

В пакете Yii HTML добавлен класс NoEncode, в который можно обернуть содержимое, которое не должно быть экранировано в HTML-тегах (PR).

Например:

// <b><i>hello</i></b>
echo Html::b(NoEncode::string('<i>hello</i>'));
⚡️ #yiisoftHtml

При генерации HTML-тегов в пакете Yii HTML для атрибутов тега с пустым строковым значением теперь будет выводится только название атрибута без значения (PR).

Вместо <tag attr=""> будет генерироваться <tag attr>.

Этот код соответствует HTML-спецификации.
⚡️ #yiisoftArrays

Подчистили хелпер Yii Arrays (PR):

- подчищен код, улучшены doc-блоки;
- обновлены dev-зависимости;
- исправлены ошибки psalm;
- улучшены конфигурация GitHub Workflow и другие служебные файлы.
🎁 #yiisoftRateLimiter #Релиз #МажорныйРелиз

Мажорный релиз Yii Rate Limiter Middleware 2.0.0

• Добавлен интерфейс LimitPolicyInterface, который позволяет использовать различные политики ограничения на количество запросов. Из коробки предоставляется три реализации:

- LimitAlways — ограничения применяются для всех запросов;
- LimitPerIp — ограничение применяется по каждому IP отдельно;
- LimitCallback — позволяет использовать собственную логику с помощью callback-функции.

• Добавлен интерфейс StorageInterface для хранение счётчиков запросов. Введение интерфейса даёт возможность реализовать собственные хранилища. Из коробки предоставляется SimpleCacheStorage использующий для хранения любой PSR-совместимый кэш.

• Для получения текущего времени добавлен интерфейс TimerInterface. Это позволило переписать тесты не используя usleep(), что в свою очередь сделало их более стабильными.

• Мидлварь Middleware переименована в LimitRequestsMiddleware.

—————

Обновление с версии 1.*

Нужно обновить инициализирующий код с:

$cache = new ArrayCache();
$counter = new Counter(2, 5, $cache);
$middleware = new Middleware($counter, $responseFactory);

на:

$storage = new SimpleCacheStorage($cache);
$counter = new Counter($storage, 2, 5);
$middleware = new LimitRequestsMiddleware($counter, $responseFactory);

—————

Релиз основан на PR от kafkiansky 👍
⚡️ #yiisoftProxy

В пакете Yii Proxy снова исправлена ошибка с некорректным проксированием исключений, что в некоторых случаях приводило к дублированию текста ошибки (PR). Теперь выбрасывается тоже самое исключение без каких-либо изменений.
⚡️ #yiisoftDb

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

Наследование невозможно, так как фабрика в Yii Factory ранее была финализирована.
⚡️ #yiisoftMutexFile #yiisoftMutexPdoMysql #yiisoftMutexPdoPgsql #yiisoftMutexPdoOracle

В мьютекс-драйверах в readme добавлена документация по использованию:

- File Driver (PR),
- MySQL PDO Driver (PR),
- Postgres PDO Driver (PR),
- Oracle PDO Driver (PR).