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

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

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

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

🎁 Yii Error Handler 2.0.2

• Исправлен JSON-рендеринг в случае, когда брошено исключение о рекурсии, для этого в функции json_encode заменили опцию JSON_THROW_ON_ERROR на JSON_PARTIAL_OUTPUT_ON_ERROR (PR).
👍1
⚡️ #yiisoftRbac #yiisoftRbacPhp

В интерфейсе ItemsStorageInterface пакета Yii Role-Based Access Control заменили метод getAllChildren() на getParents() (PR).

Соответствующим образом адаптировали хранилище Yii RBAC PHP File Storage (PR).
⚡️ #yiisoftYiiDbMigration

В пакете Yii DB Migration добавили поддержку Yii View версии 5.0 и адаптировали тесты к PHP 8.1 (PR).
⚡️ #yiisoftDemo

Демо веб-приложения переехало на Cycle ORM 2, а также заменили аннотации на атрибуты (PR).
#yiisoftSession #ПатчРелиз #Релиз

🎁 Yii Session 1.0.4

• Исправлено: не устанавливалась кука в случаях, когда сессия закрывалась вручную (PR).
⚡️ #yiisoftValidator

Улучшили валидацию вложенных данных в Yii Validator (PR):

• В классе результата валидации Result (объекты этого класса возвращают правила валидации) добавлены новые методы:

- getErrorObjects() — возвращает массив объектов Error, из которых можно получить текст ошибки и атрибут (в виде пути, учитывающего вложенность) к которому он относится;

- getErrorsIndexedByPath() — возвращает массив, где ключи — это атрибуты в виде пути с точкой в качестве разделителя, а значения — массив строк с ошибками, относящимися к этому атрибуту.

Пример:

use Yiisoft\Validator\Rule\Each;
use Yiisoft\Validator\Rule\Nested;

$data = [
'charts' => [
[
'points' => [
['coordinates' => ['x' => -11, 'y' => 11], 'rgb' => [-1, 256, 0]],
['coordinates' => ['x' => -12, 'y' => 12], 'rgb' => [0, -2, 257]]
],
],
[
'points' => [
['coordinates' => ['x' => -1, 'y' => 1], 'rgb' => [0, 0, 0]],
['coordinates' => ['x' => -2, 'y' => 2], 'rgb' => [255, 255, 255]],
],
],
[
'points' => [
['coordinates' => ['x' => -13, 'y' => 13], 'rgb' => [-3, 258, 0]],
['coordinates' => ['x' => -14, 'y' => 14], 'rgb' => [0, -4, 259]],
],
],
],
];

$rule = Nested::rule([
'charts' => Each::rule(new Rules([
Nested::rule([
'points' => Each::rule(new Rules([
Nested::rule([
'coordinates' => Nested::rule([
'x' => [Number::rule()->min(-10)->max(10)],
'y' => [Number::rule()->min(-10)->max(10)],
]),
'rgb' => Each::rule(new Rules([
Number::rule()->min(0)->max(255)->skipOnError(false),
])),
])->skipOnError(false),
])),
])->skipOnError(false),
])),
]);

$errors = $rule->validate($data)->getErrorsIndexedByPath();

В результате переменная $errors будет содержать вот такой массив:

$errors = [
'charts.0.points.0.coordinates.x' => ['Value must be no less than -10.'],
// ...
'charts.0.points.0.rgb.0' => ['Value must be no less than 0. -1 given.'],
// ...
];

• В классе ResultSet() (объект этого класса возвращает валидатор, как результат валидации) также добавлены методы getErrorObjects() и getErrorsIndexedByPath(), они возвращают те же данные, что и в классе Result, но с разбивкой по атрибутам верхнего уровня.

Скорей всего, в дальнейшем ResultSet и Result будут объединены в один класс и как правила валидации, так и валидатор в качестве результата валидации будут возвращать объекты одного класса.
👍7
⚡️ #yiisoftValidator

В правиле валидации MatchRegularExpression из пакета Yii Validator добавлена проверка на тип проверяемого значения, оно должно быть строкой (PR).
⚡️ #yiisoftValidator

В пакете Yii Validator класс Rules переименован в RuleSet (PR).
⚡️ #yiisoftValidator

В пакете Yii Validator удалили класс ResultSet, теперь валидатор и правила валидации возвращают экземпляр класса Result (PR).
⚡️ #yiisoftYiiSwagger

В пакете Yii Swagger в сервисе \Yiisoft\Swagger\Service\SwaggerService добавлен метод withOptions(), позволяющий задать конфигурацию объекта \OpenApi\Annotations\OpenAPI создаваемого этим сервисом (PR, PR).
#yiisoftYiiSwagger #МинорныйРелиз #Релиз

🎁 Yii Swagger 1.2.0

• В сервисе \Yiisoft\Swagger\Service\SwaggerService добавлен метод withOptions(), позволяющий задать конфигурацию объекта \OpenApi\Annotations\OpenAPI создаваемого этим сервисом. Конфигурация объекта OpenAPI также доступна через параметры пакета в config/params.php:

'yiisoft/yii-swagger' => [
// Default values are specified.
'open-api-options' => [
'aliases' => OpenApi\Generator::DEFAULT_ALIASES,
'namespaces' => OpenApi\Generator::DEFAULT_NAMESPACES,
'analyser' => null,
'analysis' => null,
'processors' => null,
'logger' => null,
'validate' => true,
'version' => OpenApi\Annotations\OpenApi::DEFAULT_VERSION,
],
],
//...
⚡️ Во всех пакетах добавили разрешенные плагины (allow-plugins) в секцию конфигурации composer.json:

• во всех пакетах разрешены плагины infection/extension-installer и composer/package-versions-deprecated;

• дополнительно в раннерах разрешён плагин yiisoft/config;

• дополнительно в демо- и шаблонах приложений разрешены плагины codeception/c3 и yiisoft/config.

До июля 2022 года composer по умолчанию разрешает установку любых composer-плагинов, затем будут разрешены только плагины указанные в composer.json в секции configallow-plugins (см. документацию composer).
👍3
⚡️ #yiisoftValidator #yiisoftForm

Переименовали методы в классе Result из пакета Yii Validator, в итоге публичный интерфейс класса выглядит следующим образом:

isValid(): bool

isAttributeValid(string $attribute): bool

getErrors(): Error[]

getErrorMessages(): string[]

getErrorMessagesIndexedByPath(string $separator = '.'): array<string, non-empty-list<string>>

getErrorMessagesIndexedByAttribute(): array<string, non-empty-list<string>>

getAttributeErrors(string $attribute): Error[]

getAttributeErrorMessages(string $attribute): string[]

getCommonErrorMessages(): string[]

Yii Form адаптировали к этим изменениям (PR).
⚡️ #yiisoftValidator

В пакете Yii Validator добавили несколько новых методов в класс Result (PR).

getErrorsIndexedByAttribute() — возвращает список сообщений об ошибках, разбитых по атрибутам. Например:
[
'name' => ['error1', 'error2'],
'age' => ['error'],
]


getCommonErrors() — возвращает список сообщений об ошибках, не относящихся к атрибутам.
⚡️ #yiisoftDocs

В разделе «Стиль кода» документации добавили соглашение об именовании коллекций: классы, интерфейсы, трейты и переменные, являющиеся коллекцией, должны оканчиваться на Collection (PR).
👍3
⚡️ #yiisoftForm

Адаптировали пакет Yii Form к удалению класса ResultSet в Yii Validator (PR).
⚡️ #yiisoftSecurity

В Yii Security исправили ошибки статического анализа, которые проявились с очередным обновлением psalm (PR).
👍1👏1
⚡️ #yiisoftYiiConsole

В пакете Yii Console в методе Yiisoft\Yii\Console\CommandLoader::get() добавили тип возвращаемого результата (PR):

public function get(string $name): Command
#yiisoftYiiConsole #МинорныйРелиз #Релиз

🎁 Yii Console 1.0.1

• В методе Yiisoft\Yii\Console\CommandLoader::get() добавлен тип возвращаемого результата (Symfony\Component\Console\Command\Command).

• Добавлена поддержка 6й версии пакета symfony/console.
⚡️ #yiisoftRequestModel #yiisoftForm

К последним изменениям в Yii Validator адаптировали Yii Request Model (PR) и Yii Form (PR).
⚡️ #yiisoftDemoApi

В инструкцию по установке демо API-приложения добавили пункт об изменении владельца директории приложения (PR).
👍1