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

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

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

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

В пакете Yii Queue избавились от сомнительных поведений (behaviors) и заменили их мидлварями (PR).

Как было?
Если была нужда как-то иначе сконфигурировать отправку сообщения в очередь, создавалось поведение. Например, поведение отложенного сообщения. Сходу было непонятно, чем эти поведения являются и как их использовать, а также они давали меньше гибкости в настройке, чем хотелось бы.

Как стало?
Поведений больше нет, теперь есть мидлвари. Да, прямо как в PSR-15 для обработки HTTP-запросов, но работает не с объектом Request, а с сообщением для очереди.

Стека мидлварей у нас два:
- на отправку сообщения в очередь;
- на обработку сообщения из очереди.

Их можно использовать отдельно или комбинировать на ваш выбор. Можно, например, вручную добавлять ID отправляемому сообщению, если используете стандарт amqp, в котором ID нет. Можно прокидывать дополнительную метаинформацию на push, а на consume — вычитывать и использовать её. Или добавить метрики в мониторинг для Prometheus. И так далее.

Если вы раньше не использовали поведения, то можно спокойно обновляться, для вас ничего не изменится.

По использованию мидлварей информация есть в readme.

Также это изменение открывает возможность реализации стратегий обработки ошибок, которые могут быть сделаны как мидлварь на consume. Эта работа была начата раньше на поведениях.
🔥9👍2
⚡️ #yiisoftRequestModel

В Yii Request Model немного порефакторили существующие тесты и добавили новых (PR).
🔥2
⚡️ #yiisoftDb

Исправили ошибку psalm в Yii DB (PR).
🔥3😁1🎉1
#yiisoftStrings #МинорныйРелиз #Релиз

🎁 Yii Strings 2.1.0

• Добавлен метод StringHelper::parsePath() для парсинга путей вида path.to.my.dream с поддержкой произвольных разделителей и символа экранирования (PR).

• Добавлен метод Inflector::toSnakeCase(), конвертирующий строку в "snake_case".
🔥2
#yiisoftArrays #МинорныйРелиз #Релиз

🎁 Yii Arrays 2.1.0

• Для парсинга строковых путей в таких методах, как ArrayHelper::getValueByPath(), ArrayHelper::pathExists() и так далее, теперь используется метод StringHelper::parsePath() из Yii Strings, что добавило возможность экранирования символа разделителя с помощью обратного слэша (PR, PR).
🔥3
⚡️ #yiisoftValidator

В Yii Validator добавили возможность упрощённой записи комбинации правил Nested и Each (PR). Например:

$rule = new Nested([
'charts.*.points.*.coordinates.x' => [new Number(min: -10, max: 10)],
'charts.*.points.*.coordinates.y' => [new Number(min: -10, max: 10)],
'charts.*.points.*.rgb' => [
new Count(exactly: 3);
new Number(min: 0, max: 255),
]),
]);


Подробнее в readme.
🔥2
⚡️ #yiisoftDocs

В документации актуализировали ссылки на yiiframework.com (PR).
⚡️ #yiisoftValidator

В Yii Validator доработали логику валидации данных (PR).

• Правила валидации, передаваемые напрямую в метод Validator::validate() всегда имеют приоритет над правилами, содержащимися в проверяемом объекте.

ScalarDataSet переименован в MixedDataSet. Метод MixedDataSet::getAttributeValue() теперь всегда возвращает null.

AttributeDataSet переименован в ObjectDataSet и существенно переработан.

Теперь в конструктор передаётся объект и опционально второй параметр, который указывает параметры какой области видимости обрабатывать в объекте (по умолчанию, ReflectionProperty::IS_PRIVATE|ReflectionProperty::IS_PROTECTED|ReflectionProperty::IS_PUBLIC). То есть появилась возможность обрабатывать не только публичные, но и защищённые, и приватные свойства объекта.

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

Для объектов, реализующих RulesProviderInterface, правила из атрибутов использоваться не будут, вместо этого будет вызываться метод getRules().

• В зависимости от данных передаваемых в метод validate() они оборачиваются в соответствующий DataSet-класс:
- объекты, реализаующие DataSetInterface, — не оборачиваются;
- прочие объекты — оборачиваются в ObjectDataSet;
- массивы — оборачиваются в ArrayDataSet;
- прочие данные — оборачиваются в MixedDataSet.

Таким образом, теперь для валидации объекта, в котором правила прописаны атрибутами к соответствующим свойствам, достаточно лишь передать его в метод validate:

$result = $validator->validate($myObject);
🔥4
⚡️ #yiisoftValidator

В Yii Validator в сообщениях для правил IsTrue и Boolean для булевых значений теперь выводится true и false вместо 1 и 0 соответственно (PR).
🔥2
⚡️ #yiisoftValidator

В Yii Validator добавили возможность с помощью функции обратного вызова определять, какое значение считать пустым (PR).

Функцию можно задать с помощью параметра skipOnEmptyCallback как в конструкторе валидатора, так и в конкретном правиле.

Из коробки доступно три класса, реализующих метод __invoke, то есть их можно использовать как функции обратного вызова:

SkipOnEmpty — пустыми считаются значения null, [] и пустая строка;
SkipOnNull — пустыми считаются только значения null;
SkipNone — никакое значение не считается пустым.
🔥5
⚡️ #yiisoftProfiler

В Yii Profiler добавили интерфейс ProfilerAwareInterface и трейт ProfilerAwareTrait, позволяющий его реализовать (PR).
⚡️ #yiisoftForm

Yii Form адаптировали к последним изменениям в валидаторе, сейчас код для сбора правил из атрибутов в модели формы происходит в самой форме (PR).
🔥3
⚡️ #yiisoftDocs

В документации актуализировали ссылки на внешние ресурсы (PR).
🔥1
⚡️ #yiisoftProfiler

В Yii Profiler улучшили документацию в части установки пакета (PR) и добавили недостающие строки в лог изменений (PR).
👍3
#yiisoftProfiler #ПатчРелиз #Релиз

🎁 Yii Profiler 1.0.5

• Добавлен интерфейс ProfilerAwareInterface и трейт ProfilerAwareTrait, позволяющий его реализовать.

• Исправлено некорректное использование переменной $params в конфигурации пакета.
🔥1
⚡️ #yiisoftDocs

В документации актуализировали ссылки на внешние ресурсы (PR).
🔥1
⚡️ #yiisoftProfiler

Немного подчистили код в Yii Profiler и подняли минимальные версии зависимостей (PR):
- PHP до ^8.0,
- psr/log до ^2.0|^3.0,
- yiisoft/files до ^2.0.
🔥1
⚡️ #yiisoftValidator

В Yii Validator удалили атрибут Embedded, теперь его функцию выполняет правило Nested (PR).

В Nested можно передать в качестве правил:
- массив (или iterable-объект) с правилами;
- имя класса, из атрибутов и свойств которого автоматически будет сформирован массив с правилами;
- объект, реализующий RulesProviderInterface.

Если в Nested правила не передавать, то они будут автоматически получены из атрибутов свойств валидируемого объекта.
🔥4
⚡️ #yiisoftValidator

Несколько улучшений в Yii Validator.

• Для правила Nested разрешили использовать пустой массив при указании правил (PR).

• Исправили проблему с некорректным путём ошибки, которая возникала в некоторых случаях при использовании правила Nested внутри Each (PR).
🔥3
⚡️ #yiisoftRbacCycleDb

Несколько изменений в пакете Yii RBAC Cycle Database Storage.

• Актуализировали конфигурацию scrutinizer, а в GitHub Actions перешли на использование Yii GitHub Actions (PR).

• Адаптировали пакет к последней версии Yii RBAC (PR).
🔥3