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

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

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

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

В пакете Yii User для класса текущего пользователя CurrentUser сессия теперь передаётся не через конструктор, а через новый метод withSession() + сделаны иммутабельными и переименованы существующие методы (PR):

setAccessChecker()withAccessChecker(),
setAuthTimeout()withAuthTimeout(),
setAbsoluteAuthTimeout()withAbsoluteAuthTimeout().

В демо веб-приложения добавили конфигурацию CurrentUser с использованием новых методов (PR).
⚡️ #yiisoftDi

Продолжаем готовить Yii Dependency Injection к релизу.

• Ресеттеры состояния сервисов из атрибутов reset в дефинишенах теперь работают только в случаях, когда для контейнера не задано определение сервиса StateResetter или его расширение. Другими словами, если вы определили для контейнера StateResetter, то для сброса состояния будет использовать именно он (PR, PR).

• Улучшена валидация конфигурации (теги и др.) + уровень Psalm поднят до 1 (PR).
⚡️ #yiisoftYiiSwagger

Актуализировали пакет Yii Swagger (PR, PR):

• финализировали класс SwaggerUiAsset,
• убрали поддержку PHP 7.4 (теперь минимальная версия 8.0),
• переехали на кэш Yii Cache,
• подчистили код,
• причесали все служебные файлы,
• настроили процессы GitHub Actions.
⚡️ #yiisoftDi

В Yii Dependency Injection исправили получение ресеттеров состояния сервисов из делегатов: ранее, если задан кастомный ресеттер для контейнера, ресеттер из делегатов не использовался (PR).
#yiisoftDi #ПервыйРелиз #МажорныйРелиз #Релиз

🎁 Yii Dependency Injection 1.0.0

PSR-совместимый контейнер внедрения зависимостей.

• Полное соответствие PSR-11.

• Поддержка внедрения зависимостей в конструктор, свойства и методы.

• Определение циклических зависимостей.

• Гибкий синтаксис для определение сервисов, в том числе в виде массива.

• Загрузка существующих классов без явного определения в контейнере (опционально).

• Поддержка алиасов для сервисов.

• Поддержка сервис-провайдеров.

• Наличие инструмента для сброса состояния в долгоживущих приложениях, таких как RoadRunner или Swoole.

• Поддержка контейнеров-делегатов, которые пробуют разрешить зависимость, если основной контейнер не смог.

• Наличие композитного контейнера.
⚡️ #yiisoftYiiSwagger

Небольшое улучшение публичного API в Yii Swagger: метод SwaggerJson::withAnnotationPaths() теперь принимает не массив путей, а переменное количество параметров (PR).

⚡️ #yiisoftDemo #yiisoftDemoApi #yiisoftAppApi

Соответствующие изменения внесены в приложения:

Демо веб-приложения (PR),
Демо API-приложения (PR),
Шаблон API-приложения (PR).
⚡️ #yiisoftYiiSwagger

В пакете Yii Swagger подняли версию зависимости zircote/swagger-php до ^4.0 (PR).
⚡️ #yiisoftValidator

В пакете Yii Validator финализировали классы и улучшили описания в doc-блоках (PR).
⚡️ #yiisoftYiiHttp

Немного причесали пакет Yii HTTP Application (PR):
- исправили мелкие ошибки в doc-блоках;
- исправили пространства имён в тестах;
- улучшили конфигурации GitHub Actions, scrutinizer и psalm;
- актуализировали версии dev-зависимостей.
⚡️ #yiisoftConfig

В пакете Yii Config добавили тесты, проверяющую работу с пустыми конфигурациями (PR).
⚡️ #yiisoftConfig

Улучшения в Yii Config.

• Реализовали новый метод Config::has(), позволяющий узнать, существует ли группа конфигураций (PR).

Например:

if ($config->has('web')) {
$web = $config->get('web');
}


• Добавили поддержку «пустых» окружений без групп конфигураций (PR).
⚡️ #yiisoftYiiRunnerHttp #yiisoftYiiRunnerConsole #yiisoftYiiRunnerRoadrunner

В раннерах добавили проверку существования групп конфигураций определений сервисов, сервис-провайдеров и делегатов при настройке DI-контейнера:

Yii HTTP Runner (PR),
Yii Console Runner (PR),
Yii RoadRunner Runner (PR).
#yiisoftYiiHttp #ПервыйРелиз #МажорныйРелиз #Релиз

🎁 Yii HTTP Application 1.0.0

Пакет предоставляет класс Application, а также события и обработчики, необходимые для работы с HTTP. Пакет реализован с использованием PSR-7 интерфейсов.

У пакета, как обычно, высокие технические показатели качества:
- 100% покрытие тестами;
- 100% MSI;
- 100% уровень покрытия типами;
- Psalm уровень 1.
⚡️ #yiisoftDemo

В демо веб-приложения выполнили небольшой рефакторинг переводов, в том числе улучшили наименования идентификаторов строк (PR).
⚡️ #yiisoftRouterFastroute

Подчистили «мёртвый» код в Yii Router FastRoute Adapter и немного улучшили описания в doc-блоках (PR).
⚡️ #yiisoftYiiRunnerHttp #yiisoftYiiRunnerConsole #yiisoftYiiRunnerRoadrunner

Явно прописали зависимость от yiisoft/config в пакетах:

Yii HTTP Runner (PR),
Yii Console Runner (PR),
Yii RoadRunner Runner (PR).
⚡️ #yiisoftConfig

Добавлена возможность хранения конфигурации пакета Yii Config в виде массива в PHP-файле вместо секции extra в composer.json (PR). Для этого нужно указать путь к PHP-файлу в composer.json:

"extra": {
"config-plugin-file": "path/to/configuration/file.php"
},


... и перенести настройки в этот файл:

return [
'config-plugin-options' => [
'source-directory' => 'config',
],
'config-plugin' => [
'params' => [
'params.php',
'?params-local.php',
],
'web' => 'web.php',
],
'config-plugin-environments' => [
'dev' => [
'params' => 'dev/params.php',
'app' => [
'$web',
'dev/app.php',
],
],
'prod' => [
'app' => 'prod/app.php',
],
],
];
⚡️ #yiisoftDemo

В демо веб-приложения добавлены модели форм авторизации и регистрации, а также улучшено оформления самих форм (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).
#yiisoftWidget #ПервыйРелиз #МажорныйРелиз #Релиз

🎁 Yii Widget 1.0.0

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

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

Финализированы классы в демо веб-приложения (PR).