⚡️ #yiisoftDi
Большое обновление сервис-провайдеров в контейнере зависимостей Yii Dependency Injection (PR).
По сути это абсолютно новые сервис-провайдеры. Разрабатывая их, мы ориентировались на container-interop/service-provider (но сделали всё-таки немного по-другому).
Вместо наследования от класса, теперь провайдеры должны реализовывать интерфейс
•
- должен только возвращать дефинишены и не иметь никаких сайд-эффектов;
- должен быть идемпотентным.
•
Пример сервис-провайдера:
В рамках этого PR были удалены классы и интерфейсы
—————
#yiisoftApp #yiisoftAppApi #yiisoftDemo #yiisoftDemoApi
В процессе адаптации пакетов, использующих сервис-провайдеры была реализована концепция начальной загрузки (
- шаблон веб-приложения (PR),
- шаблон API-приложения (PR),
- демо веб-приложения (PR, PR),
- демо API-приложения (PR).
—————
#yiisoftWidget #yiisoftYiiCycle #yiisoftYiiFilesystem #yiisoftYiiDebug #yiisoftYiiDebugApi #yiisoftYiiSentry
Пакеты, использующие сервисы, были адаптированы под новую реализацию:
- Yii Widget (PR),
- Yii Cycle (PR),
- Yii Filesystem (PR),
- Yii Debug (PR),
- Yii Debug Api (PR),
- Yii Sentry (PR).
Большое обновление сервис-провайдеров в контейнере зависимостей Yii Dependency Injection (PR).
По сути это абсолютно новые сервис-провайдеры. Разрабатывая их, мы ориентировались на container-interop/service-provider (но сделали всё-таки немного по-другому).
Вместо наследования от класса, теперь провайдеры должны реализовывать интерфейс
Yiisoft\Di\Contracts\ServiceProviderInterface
, содержащий два метода:•
getDefinitions()
определяет дефинишены для контейнера. Этот метод:- должен только возвращать дефинишены и не иметь никаких сайд-эффектов;
- должен быть идемпотентным.
•
getExtensions()
возвращает функции обратного вызова, модифицирующие сервисы после их создания. В функцию передаются два аргумента: контейнер и созданный сервис, Возвращает функция сам сервис. Пример:static function (ContainerInterface $container, MyService $service) {Важно! Сервис-провайдер НЕ должен содержать какую-либо бизнес-логику или другую функциональность, отличную от определения дефинишенов, например внесение изменений в базу данных или определение переменных окружения.
return $service->withAnotherOption(42);
}
Пример сервис-провайдера:
use Yiisoft\Di\Container;—————
use Yiisoft\Di\Support\ServiceProvider;
final class CarFactoryProvider extends ServiceProviderInterface
{
public function getDependencies(): array
{
return [
CarFactory::class => [
'class' => CarFactory::class,
'$color' => 'red',
],
EngineInterface::class => SolarEngine::class,
WheelInterface::class => [
'class' => Wheel::class,
'$color' => 'black',
],
CarInterface::class => [
'class' => BMW::class,
'$model' => 'X5',
],
];
}
public function getExtensions(): array
{
return [
// Класс Garage должен быть уже определён в контейнере
Garage::class => function(ContainerInterface $container, Garage $garage) {
$car = $container->get(CarFactory::class)->create();
$garage->setCar($car);
return $garage;
}
];
}
}
В рамках этого PR были удалены классы и интерфейсы
DeferredServiceProviderInterface
, DeferredServiceProvider
, ServiceProvider
и AbstractContainerConfigurator
.—————
#yiisoftApp #yiisoftAppApi #yiisoftDemo #yiisoftDemoApi
В процессе адаптации пакетов, использующих сервис-провайдеры была реализована концепция начальной загрузки (
bootstrap
) в приложениях:- шаблон веб-приложения (PR),
- шаблон API-приложения (PR),
- демо веб-приложения (PR, PR),
- демо API-приложения (PR).
Bootstrap
представляет собой массив функций (точнее callable
) вида function (ContainerInterface $container): void
, которые последовательно будут вызваны при запуске приложения.—————
#yiisoftWidget #yiisoftYiiCycle #yiisoftYiiFilesystem #yiisoftYiiDebug #yiisoftYiiDebugApi #yiisoftYiiSentry
Пакеты, использующие сервисы, были адаптированы под новую реализацию:
- Yii Widget (PR),
- Yii Cycle (PR),
- Yii Filesystem (PR),
- Yii Debug (PR),
- Yii Debug Api (PR),
- Yii Sentry (PR).
⚡️ Практически во всех пакетах добавлен ежедневный запуск тестов через 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
#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
⚡️ #yiisoftYiiCycle
Конфигурация в пакете Yii Cycle адаптирована для работы с делегатами DI-контейнера (PR). Это позволило в приложениях получать репозитории Cycle прямо из основного контейнера.
Конфигурация в пакете Yii Cycle адаптирована для работы с делегатами DI-контейнера (PR). Это позволило в приложениях получать репозитории Cycle прямо из основного контейнера.
⚡️ #yiisoftYiiCycle
Улучшения и рефакторинг в пакете Yii Cycle (PR).
• Изменения в источниках данных для сборки схемы БД:
-
-
-
• В параметрах конфигурации добавлен ключ
• Улучшения в выводе схемы базы данных в консоли и записи в PHP-файл.
• Удалено использование всех устаревших методов, констант и прочего из
Улучшения и рефакторинг в пакете Yii Cycle (PR).
• Изменения в источниках данных для сборки схемы БД:
-
AnnotatedSchemaConveyor
теперь получает данные только из аннотаций (ранее получал ещё и из атрибутов);-
AttributedSchemaConveyor
получает данные из атрибутов;-
CompositeSchemaConveyor
получает данные одновременно из атрибутов и аннотаций.• В параметрах конфигурации добавлен ключ
entity-paths
, а ключ annotated-entity-paths
помечен как устаревший и в дальнейшем будет удалён.• Улучшения в выводе схемы базы данных в консоли и записи в PHP-файл.
• Удалено использование всех устаревших методов, констант и прочего из
cycle/orm
.⚡️ #yiisoftYiiCycle
В пакете Yii Cycle добавлена ветка
Установка:
В пакете Yii Cycle добавлена ветка
2.0
, работающая с Cycle ORM версии 2, которая сейчас находится в стадии активной разработки (PR).Установка:
composer require yiisoft/yii-cycle "2.0.x-dev"
Информацию на русском о новой версии Cycle ORM можно почитать в gist о Cycle ORM v2.⚡️ #yiisoftYiiCycle
В ветке
В ветке
2.0
пакета Yii Cycle добавлена поддержка модификаторов схемы и пакета cycle/schema-renderer
для генерации схемы (PR).⚡️ #yiisoftYiiCycle
Для консольных команд
Для консольных команд
migrate/up
и migrate/down
в пакете Yii Cycle ORM добавлена поддержка опции --no-interaction
(PR).⚡️ #yiisoftYiiCycle
В Yii Cycle ORM добавлена поддержка пакета
В Yii Cycle ORM добавлена поддержка пакета
cycle/schema-renderer
для генерации схемы (PR).⚡️ #yiisoftYiiCycle
Актуализировали ветку
Актуализировали ветку
2.0
в пакете Yii Cycle ORM в соответствии с последними изменениями в Cycle ORM, в частности конфигурирование с помощью DTO (PR).⚡️ #yiisoftYiiCycle
В Yii Cycle ORM исправлена ошибка:
В Yii Cycle ORM исправлена ошибка:
AttributedSchemaConveyor
вместо AttributeReader
использовал AnnotationReader
(PR в мастер, PR в ветку 2.0).⚡️ #yiisoftYiiCycle
В ветке 2.0 пакете Yii Cycle ORM фабрика
В ветке 2.0 пакете Yii Cycle ORM фабрика
DbalFactory
адаптирована к последним изменениям в Cycle ORM (PR).⚡️ #yiisoftYiiCycle
Несколько улучшений в Yii Cycle ORM (PR):
- метод
- сделали рефакторинг конфигурации пакета.
Несколько улучшений в Yii Cycle ORM (PR):
- метод
RepositoryContainer::get()
в случае, если запрашиваемый репозиторий не найден, теперь бросает исключение Yiisoft\Di\NotFoundException
вместо Yiisoft\Definitions\Exception\NotFoundException
;- сделали рефакторинг конфигурации пакета.