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

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

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

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

🎁 Yii Proxy 1.0.4

Во вчерашнем релизе ошибочно финализировали конструктор в ObjectProxy. Переопределение конструктора используется в Yii Debug. Исправляемся.

• Удалена финализация конструктора в классе ObjectProxy (PR).
🔥3
⚡️ #yiisoftForm #yiisoftDemoApi

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

Демо API-приложения адаптировали к этим изменениям (PR).
👍4
This media is not supported in your browser
VIEW IN TELEGRAM
⚡️ #yiisoftYiiDebugViewer

Доработали внешний вид тулбара в Yii Debug Viewer (PR):
- добавили изменение фона при наведении на табы;
- сделали соответствующий курсор в зоне изменения размера тулбара;
- убрали возможность выделения текста в тулбаре.
🔥11👍1🤔1
⚡️ #yiisoftDemo

Сделали рефакторинг процесса регистрации пользователя в демо веб-приложения (PR).
🔥2
⚡️ #yiisoftYiiDevTool

Доработали вывод результата выполнения команд enable и disable в Yii Development Tool. Теперь пакеты, которые уже были включены/отключены ранее выводятся отдельным списком (PR).
👍4
⚡️ #yiisoftDocs

В документации актуализировали ссылки в кодексе поведения (PR).
👍2
⚡️ #yiisoftDb #yiisoftDbMssql #yiisoftDbMysql #yiisoftDbOracle #yiisoftDbPgsql #yiisoftDbSqlite

В Yii DB добавлены методы (PR):
-QuoterInterface::getTableNameParts(),
- TableSchemaInterface::getServerName(),
- TableSchemaInterface::serverName(),
- Schema::getRawTableName().

Соответствующие изменения внесены в пакеты + добавлены тесты:
- Yii DB MSSQL Server Extension (PR),
- Yii DB MySQL Extension (PR),
- Yii DB Oracle Extension (PR),
- Yii DB PostgreSQL Extension (PR),
- Yii DB SQLite Extension (PR).
🔥8
⚡️ #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