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

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

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

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

В Yii Definitions удалён интерфейс DependencyResolverInterface, вместо него теперь используется PSR-интерфейс ContainerInterface (PR).

Соответствующие изменения внесены в пакеты, которые использовали DependencyResolverInterface:

- Yii Factory (PR),
- Yii Dependency Injection (PR),
- Yii DB (PR).
⚡️ #yiisoftFactory

Сделали очередной рефакторинг в Yii Factory (DependencyResolver переделан в FactoryContainer) и добавили тестов (PR).
⚡️ #yiisoftDefinitions #yiisoftFactory #yiisoftDi

Изменение в Yii Definitions: теперь если обязательные nullable-параметры не удаётся разрешить, то выбрасывается исключение (PR).

Например, имеем класс:

final class Garage
{
public function __construct(?Car $car)
{
}
}


Если при создании класса Garage, не удастся создать объект Car для передачи его в конструктор, то будет брошено исключение. Ранее в этом случае в конструктор передавался null.

В соответствии с этим изменением исправлены тесты в Yii Factory (PR) и Yii Dependency Injection (PR).
⚡️ #yiisoftDefinitions #yiisoftFactory #yiisoftDi

Дефинишены, фабрика и контейнер всё ближе к релизу.

• В Yii Factory добавили документацию в readme и описания в doc-блоках.

• В Yii Definitions актуализировали readme и подчистили код.

• Перенесли класс DefinitionStorage из Yii Dependency Injection (PR) в Yii Definitions (PR).

• В тестах Yii Dependency Injection обновили версию league/container до ^4.2 (PR).
⚡️ #yiisoftDi #yiisoftFactory #yiisoftDefinitions

Продолжается работа на тройкой пакетов: контейнер, фабрика и дефинишены.

• Расширения в Yii Dependency Injection, возвращающие null, теперь игнорируются при получении сервиса из контейнера (PR).

• В Yii Definitions (PR) удалено исключение NotFoundException, а в Yii Dependency Injection (PR) и Yii Factory (PR) добавлены индивидуальные исключения NotFoundException.

• В пакете Yii Definitions удалён класс ArrayDefinitionBuilder, его функционал перенесён в класс ArrayDefinition (PR).

• В методе DefinitionResolver::resolveArray() (пакет Yii Definitions) параметр $dependencies переименован в $definitions (PR).

• Доработана документация в Yii Dependency Injection, в частности добавлено описание делегатов (PR).
⚡️ #yiisoftDi #yiisoftFactory #yiisoftDefinitions

Несколько изменений в Yii Definitions:

• Методы класса DefinitionExtractor в Yii Definitions сделаны статическими (PR).

• Изменили пространства имён в Yii Definitions (PR):
- Yiisoft\Definitions\Infrastructure\Yiisoft\Definitions\Helpers\;
- Yiisoft\Definitions\Infrastructure\DefinitionStorageYiisoft\Definitions\Helpers\DefinitionStorage.

Соответствующие изменение внесены в Yii Dependency Injection (PR) и Yii Factory (PR).
#yiisoftFactory #ПервыйРелиз #МажорныйРелиз #Релиз

🎁 Yii Factory 1.0.0

Пакет предоставляет фабрику, позволяющую создавать объекты по заранее заданным определениям (см. синтаксис в Yii Definitions) с разрешением зависимостей через PSR-11 контейнер.

Пример использования:

$container = new PSR11DependencyInjectionContainer();
$factoryConfig = [
EngineInterface::class => [
'class' => EngineMarkOne::class,
'__construct()' => [
'power' => 42,
],
]
];

$factory = new Factory($container, $factoryConfig);

$one = $factory->create(EngineInterface::class);
$two = $factory->create([
'class' => EngineInterface::class,
'__construct()' => [
'power' => 146,
],
]);


—————-

Перед релизом было внесено несколько изменений:

• контейнер стал обязательным + немного переработали и оптимизировали логику создания объектов и разрешения зависимостей (PR),

• фабрика стала полностью иммутабельной: методы set() и setMultiple() удалены, вместо них добавлен новый метод withDefinitions() (PR).
⚡️ #yiisoftAccess #yiisoftErrorHandler #yiisoftEventDispatcher #yiisoftFactory #yiisoftHttp #yiisoftI18n #yiisoftAliases #yiisoftJson #yiisoftProfiler #yiisoftInjector #yiisoftMailerSymfony #yiisoftMutex #yiisoftRateLimiter #yiisoftNetworkUtilities #yiisoftSession #yiisoftRouter #yiisoftStrings #yiisoftRouterFastroute #yiisoftRequestBodyParser #yiisoftTranslatorMessageGettext #yiisoftTranslatorExtractor #yiisoftTranslatorFormatterSimple #yiisoftTranslator #yiisoftTranslatorFormatterIntl #yiisoftTranslatorMessageDb #yiisoftUser #yiisoftVarDumper #yiisoftViewTwig #yiisoftYiiEvent #yiisoftTranslatorMessagePhp #yiisoftDataResponse #yiisoftCacheFile #yiisoftCookies #yiisoftCsrf #yiisoftAssets #yiisoftAuthJwt #yiisoftLog #yiisoftArrays #yiisoftYiiFilesystem #yiisoftYiiHttp #yiisoftYiiRunnerHttp #yiisoftLogTargetFile #yiisoftLogTargetEmail #yiisoftYiiRunnerRoadrunner #yiisoftSecurity #yiisoftYiiSwagger #yiisoftYiiSentry #yiisoftMutexFile #yiisoftMiddlewareDispatcher #yiisoftTestSupport #yiisoftYiiDebug #yiisoftYiiDebugViewer #yiisoftCacheApcu #yiisoftYiiDataview #yiisoftLogTargetSyslog #yiisoftAuth #yiisoftDefinitions #yiisoftRbacPhp #yiisoftDataDb #yiisoftData #yiisoftRequestModel #yiisoftDi #yiisoftConfig #yiisoftRbacRulesContainer

Продолжаем заменять рабочие процессы на переиспользуемые из Yii GitHub Actions:

- Yii Access (PR)
- Yii Error Handler (PR)
- Yii Event Dispatcher (PR)
- Yii Factory (PR)
- Yii HTTP (PR)
- Yii Internationalization Library (PR)
- Yii Aliases (PR)
- Yii JSON (PR)
- Yii Profiler (PR)
- Yii Injector (PR)
- Yii Mailer Symfony Mailer Extension (PR)
- Yii Mutex (PR)
- Yii Rate Limiter Middleware (PR)
- Yii Network Utilities (PR)
- Yii Session (PR)
- Yii Router (PR)
- Yii Strings (PR)
- Yii Router FastRoute Adapter (PR)
- Yii Request Body Parser (PR)
- Yii Translator gettext Message Storage (PR)
- Yii Message Extractor (PR)
- Yii Translator Simple Message Formatter (PR)
- Yii Message Translator (PR)
- Yii Translator intl Message Formatter (PR)
- Yii Translator DB Message Storage (PR)
- Yii User (PR)
- Yii VarDumper (PR)
- Yii View Twig Renderer (PR)
- Yii Event (PR)
- Yii Translator PHP Message Storage (PR)
- Yii Data Response (PR)
- Yii Cache File Handler (PR)
- Yii Cookies (PR)
- Yii CSRF Protection Library (PR)
- Yii Assets (PR)
- Yii Auth JWT (PR)
- Yii Logging Library (PR)
- Yii Arrays (PR)
- Yii Filesystem (PR)
- Yii HTTP Application (PR)
- Yii HTTP Runner (PR)
- Yii Logging File Target (PR)
- Yii Logging Email Target (PR)
- Yii RoadRunner Runner (PR)
- Yii Security (PR)
- Yii Swagger (PR)
- Yii Sentry (PR)
- Yii Mutex File Driver (PR)
- Yii Middleware Dispatcher (PR)
🤯6👍5
#yiisoftDi #yiisoftFactory #yiisoftWidget #yiisoftYiiRunner #yiisoftYiiRunnerConsole #yiisoftYiiRunnerHttp #yiisoftYiiRunnerRoadrunner #yiisoftRbacRulesContainer #ПатчРелиз #Релиз

🎁 Yii Dependency Injection 1.0.3

• Улучшена производительность при получении объектов по тегу из композитного контейнера.

• Добавлена поддержка yiisoft/definitions версии ^2.0 (PR).


🎁 Yii Factory 1.0.1

• Добавлена поддержка yiisoft/definitions версии ^2.0 (PR).


🎁 Yii Widget 1.0.1

• Добавлена поддержка yiisoft/definitions версии ^2.0 (PR).

• В решение в дружественном исключении WidgetFactoryInitializationException добавлен пример инициализации WidgetFactory.


🎁 Yii Runner 1.1.1

• Добавлена поддержка yiisoft/definitions версии ^2.0 (PR).


🎁 Yii Console Runner 1.0.1

• Добавлена поддержка yiisoft/definitions версии ^2.0 (PR).


🎁 Yii HTTP Runner 1.0.1

• Добавлена поддержка yiisoft/definitions версии ^2.0 (PR).


🎁 Yii RoadRunner Runner 1.0.1

• Добавлена поддержка yiisoft/definitions версии ^2.0 (PR).


🎁 Yii RBAC Rules Container 1.0.1

• Добавлена поддержка yiisoft/definitions версии ^2.0 (PR).
🔥1
⚡️ #yiisoftFactory #yiisoftWidget #yiisoftRbacRulesContainer

В CI добавили Rector, применили предлагаемые изменения и подняли минимальную требуемую версию PHP до ^8.0 в пакетах:
- Yii Factory (PR),
- Yii Widget (PR),
- Yii RBAC Rules Container (PR, PR).
👏3
#yiisoftFactory #МинорныйРелиз #Релиз

В CI пакета добавили проверку транзитивных зависимостей (PR) и сделали минорный релиз.

🎁 Yii Factory 1.1.0

• Минимальная версия PHP увеличена до ^8.0.

• Добавлена поддержка yiisoft/definitions версии ^3.0.1 (PR).
👏3
#yiisoftFactory #МинорныйРелиз #Релиз

🎁 Yii Factory 1.2

• Добавлена возможность использовать фабрику без контейнера.
👍5👾2
#yiisoftFactory #МинорныйРелиз #Релиз

🎁 Yii Factory 1.3

• Добавлена «строгая» фабрика StrictFactory, которая позволяет создать экземпляры только тех объектов, для которых явно прописаны их определения (дефинишены).
👍5👾1