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

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

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

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

В интерфейсе Yiisoft\Factory\DependencyResolverInterface метод resolve() переименован в resolveReference(), так как он разрешает не все зависимости, а только ссылки (PR в Yii Factory, PR в Yii Dependency Injection).
⚡️ #yiisoftFactory #yiisoftDi

Несколько изменений, касающихся дефинишенов в Yii Factory (PR):

• В динамических ссылках DynamicReference запрещено использовать объекты. Попытка передать объект будет вызывать исключение (это работает и для контейнера).

• Объекты, указанные в дефинишене для передачи в качестве аргументов в конструктор, в фабрике теперь НЕ клонируются.

• В интерфейсе Yiisoft\Factory\DependencyResolverInterface удалён метод shouldCloneOnResolve().

• Удалён неиспользуемый код и некорректные тесты.

DependencyResolver в Yii Dependency Injection адаптирован к этим изменениям (PR).
⚡️ #yiisoftYiiAuthClient

В пакете Yii External Authentication Extension ранее удалённый интерфейс Yiisoft\Factory\FactoryInterface заменён на прямое использование фабрики Yiisoft\Factory\Factory (PR).
⚡️ #yiisoftApp #yiisoftViewTwig

В шаблоне веб-приложения удалена лишняя проверка при выводе заголовка страницы <title> (PR).

Аналогичная проблема исправлена в документации к пакету Yii View Twig Renderer (PR).

Спасибо Chabib Nurozak за обнаруженную ошибку 👍
⚡️ #yiisoftMutex

В пакете Yii Mutex добавлены тесты для Mutex и MutexFactory (PR).
⚡️ #yiisoftMutexFile #yiisoftMutexPdoMysql #yiisoftMutexPdoPgsql #yiisoftMutexPdoOracle

В мьютекс-драйверах удалена опция autoRelease (теперь она всегда включена), а автоматическое снятие блокировки выполняется с помощью деструктора класса (__desctruct()) вместо регистрации функции, которая будет выполнена при завершении скрипта (register_shutdown_function()):

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

Спасибо kafkiansky за идею 👍
⚡️ #yiisoftFactory #yiisoftDi

В конфигурациях контейнера и фабрики запрещено использование объектов, реализующих DefinitionInterface, за исключением ссылок, то есть объектов, реализующих ReferenceInterface (PR в Yii Factory, PR в Yii Dependency Injection).
⚡️ #yiisoftMutex

Реализована обработка ошибок в пользовательском коде при использовании класса Synchronizer из пакета Yii Mutex (PR).

• В мьютексе всегда будет снята блокировка, даже если во время выполнения callback-функции было брошено исключение.

• Если во время выполнения пользовательского кода произошла ошибка (не исключение, например E_WARNING), то такая ошибка будет преобразована в исключение ErrorException, что позволит перехватить её.

Спасибо Антону @faqphp за обнаруженную проблему 👍
⚡️ #yiisoftDi

В контейнере зависимостей Yii Dependency Injection немного изменён внутренний формат хранения дефинишенов для лучшей читаемости при дампе контейнера (PR).
⚡️ #yiisoftSession

Немного причесали пакет Yii Session (PR):

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

В документации к Yii Mutex добавлено предупреждение об особенностях использования деструкторов и shutdown-функций (PR).

—————

Выдержки из документации PHP

register_shutdown_function(): "Возможна регистрация нескольких подобных функций с помощью register_shutdown_function(), при этом функции будут выполняться в том порядке, в каком они были зарегистрированы. Если вы вызовете exit() в одной из зарегистрированных завершающих функций, процесс будет полностью остановлен и последующие завершающие функции не будут вызваны."

__destruct(): "Деструктор будет вызываться даже в том случае, если скрипт был остановлен с помощью функции exit(). Вызов exit() в деструкторе предотвратит запуск всех последующих функций завершения."

—————

Если в пользовательском коде или в других пакетах внутри деструктора или shutdown-функции работа скрипта будет остановлена с помощью die() или exit(), то автоматическое снятие блокировки в мьютексе может не сработать.
⚡️ #yiisoftMutex

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

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

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

Небольшой рефакторинг тестов в Yii Mutex: удалён трейт MutexTestTrait, а все тесты из него перенесены в сам класс с тестами (PR).
⚡️ #yiisoftFactory

При создании объекта с помощью фабрики из пакета Yii Factory, в случае возникновения циклической зависимости (на любом уровне вложенности), теперь выбрасывается исключение CircularReferenceException (PR).

Пример:

final class Chicken
{
public function __construct(Egg $egg)
{
}
}

final class Egg
{
public function __construct(Chicken $chicken)
{
}
}

// Будет выброшено исключение `CircularReferenceException`
$factory->create(Chicken::class);
⚡️ #yiisoftMutexPdoMysql

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

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