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

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

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

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

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

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

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

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

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

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

В конфигурациях контейнера и фабрики запрещено использование объектов, реализующих DefinitionInterface, за исключением ссылок, то есть объектов, реализующих ReferenceInterface (PR в Yii Factory, PR в Yii Dependency Injection).
⚡️ #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);
⚡️ #yiisoftFactory

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

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

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

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

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

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

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

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

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

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

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

#yiisoftCacheWincache #yiisoftView #yiisoftDi #yiisoftStrings #yiisoftRbacPhp #yiisoftYiiConsole #yiisoftCache #yiisoftDb #yiisoftRbac #yiisoftYiiAuthClient #yiisoftYiiGii #yiisoftViewTwig #yiisoftYiiWeb #yiisoftDbMssql #yiisoftDbOracle #yiisoftLog #yiisoftYiiDebug #yiisoftDbSqlite #yiisoftDbPgsql #yiisoftDbMysql #yiisoftEventDispatcher #yiisoftI18n #yiisoftYiiEvent #yiisoftYiiDbMigration #yiisoftValidator #yiisoftUser #yiisoftTranslatorMessageGettext #yiisoftSecurity #yiisoftMiddlewareDispatcher #yiisoftMutex #yiisoftNetworkUtilities #yiisoftProfiler #yiisoftProxy #yiisoftRequestBodyParser #yiisoftRouterFastroute #yiisoftInjector #yiisoftCacheApcu #yiisoftAuthJwt #yiisoftAuth #yiisoftAssets #yiisoftArrays #yiisoftAliases #yiisoftDemoApi #yiisoftDemo #yiisoftDataResponse #yiisoftData #yiisoftCsrf #yiisoftCookies #yiisoftConfig #yiisoftCacheMemcached #yiisoftCacheFile #yiisoftHttp #yiisoftHtml #yiisoftFiles #yiisoftFactory #yiisoftErrorHandler #yiisoftLogTargetDb #yiisoftLogTargetEmail #yiisoftLogTargetFile #yiisoftRequestModel #yiisoftRbacSpiralDb #yiisoftRateLimiter #yiisoftPackageTemplate #yiisoftMutexRedis #yiisoftMutexPdoPgsql #yiisoftMutexPdoOracle #yiisoftMutexFile #yiisoftMutexPdoMysql #yiisoftTranslatorFormatterSimple #yiisoftTranslatorFormatterIntl #yiisoftTranslatorExtractor #yiisoftTranslator #yiisoftTestSupport #yiisoftSession #yiisoftRouter #yiisoftRequirements #yiisoftTranslatorMessageDb #yiisoftTranslatorMessagePhp #yiisoftVarDumper #yiisoftWidget #yiisoftYiiBootstrap5 #yiisoftYiiBulma #yiisoftYiiCycle #yiisoftYiiDataview #yiisoftYiiDebugApi #yiisoftYiiDebugViewer #yiisoftMailerSwiftmailer #yiisoftMailer #yiisoftLogTargetSyslog #yiisoftJson #yiisoftForm #yiisoftYiiWidgets #yiisoftYiiView #yiisoftYiiSwagger #yiisoftYiiSentry
⚡️ #yiisoftDefinitions #yiisoftDi #yiisoftFactory

Хелперы ReferencesArray и DynamicReferencesArray перенесены из пакета Yii Dependency Injection (PR) в пакет Yii Definitions (PR).

В Yii Factory удалены дефинишены и классы для работы с ними, которые ранее были перенесены в Yii Definitions (PR).

—————

#yiisoftAssets #yiisoftYiiConsole #yiisoftCsrf #yiisoftDb #yiisoftForm #yiisoftMailerSwiftmailer #yiisoftMailerSymfony #yiisoftYiiQueue #yiisoftTranslator #yiisoftView #yiisoftWidget #yiisoftYiiBootstrap5 #yiisoftYiiDataview #yiisoftYiiDebug #yiisoftYiiDebugViewer #yiisoftYiiSwagger #yiisoftApp #yiisoftAppApi #yiisoftDemo #yiisoftDemoApi

Все пакеты и приложения, использующие дефинишены, переделаны на работу с пакетом Yii Definitions:

- Yii Assets (PR)
- Yii Bootstrap 5 (PR)
- Yii Console (PR)
- Yii CSRF (PR)
- Yii Data Widgets (PR)
- Yii DB (PR)
- Yii Debug (PR)
- Yii Debug Viewer (PR)
- Yii Form (PR)
- Yii Mailer Swiftmailer (PR)
- Yii Mailer Symfony (PR)
- Yii Message Translator (PR)
- Yii Queue (PR)
- Yii Swagger (commit)
- Yii View (PR)
- Yii Widget (PR)

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

В Yii Factory изменена логика создания объектов и разрешения зависимостей (PR). Новая логика представлена на блок-схеме.
⚡️ #yiisoftDefinitions #yiisoftFactory #yiisoftDi

Выполнен рефакторинг в пакете Yii Definitions (PR).

• Для разрешения зависимостей при получении объекта из CallableDefinition вместо обращения к DependencyResolverInterface::invoke() используется внутренний функционал пакета. Это позволило исключить пакет yiisoft/injector из зависимостей в Yii Factory и Yii Dependency Injection.

• Интерфейс DependencyResolverInterface теперь НЕ наследуется от ContainerInterface, а используемый метод get() переименован в resolve().

• В интерфейсе DependencyResolverInterface удалён метод invoke(), так как теперь он нигде не используется.

Необходимые изменения внесены в пакеты Yii Factory (PR) и Yii Dependency Injection (PR).