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

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

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

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

В пакете Yii Widget улучшен пример использования в виджете Breadcrumbs + сделаны небольшие изменения в psalm-аннотациях (PR).
⚡️ #yiisoftDi

Большое обновление сервис-провайдеров в контейнере зависимостей 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
⚡️ #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).
⚡️ #yiisoftWidget

В пакете Yii Widget добавлена поддержка всех существующих версий psr/container: ^1.0|^2.0 (PR).

Спасибо Ivanda Nothabeer за обнаруженную проблему 👍
⚡️ #yiisoftWidget #yiisoftApp #yiisoftDemo

Добавлена новая группа конфигураций widgets, содержащая дефинишены для фабрики виджетов WidgetFactory из пакета Yii Widget (PR).

Группа также добавлена в приложения:
- шаблон веб-приложения (PR),
- демо веб-приложения (PR).
⚡️ #yiisoftWidget

Доработали конфигурацию пакета Yii Widget (PR): теперь с помощью параметров можно изменить группу конфигурации для виджетов и включить/отключить валидацию конфигурации фабрики виджетов.
⚡️ #yiisoftWidget

Исправили ошибки статического анализа Psalm в Yii Widget (PR).
#yiisoftWidget #ПервыйРелиз #МажорныйРелиз #Релиз

🎁 Yii Widget 1.0.0

Виджеты представляют собой многоразовые строительные блоки, используемые в представлениях для создания сложных и настраиваемых элементов пользовательского интерфейса в рамках объектно-ориентированного подхода.

Пакет предоставляет абстрактный класс виджета и фабрику для их создания.
⚡️ #yiisoftWidget

В пакете Yii Widget добавили пример инициализации WidgetFactory в решение в дружественном исключении WidgetFactoryInitializationException (PR).
⚡️ #yiisoftYiiBulma #yiisoftWidget #yiisoftYiiWidgets #yiisoftCache #yiisoftYiiView #yiisoftView #yiisoftValidator #yiisoftFiles

Обновили версии действий actions/cache и actions/checkout до 3 в GitHub Workflows, а также подняли версию PHP в конфигурации Scrutinizer до 8.0.18 в пакетах:

- Yii Bulma (PR)
- Yii Widget (PR)
- Yii Widgets (PR)
- Yii Caching Library (PR)
- Yii View Extension (PR)
- Yii View (PR)
- Yii Validator (PR)
- Yii Files (PR)