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

Обсуждение:
https://t.me/yii3ru

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

Поддержать разработчиков:
https://opencollective.com/yiisoft
Download Telegram
⚡️ #yiisoftValidator

Ещё несколько доработок в Yii Validator.

• В SimpleRuleHandlerContainer добавили возможность в конструкторе передать уже созданные экземпляры объектов обработчиков правил (PR).

• Добавили возможность для обработчика правил Required указать критерий пустого значения по умолчанию (PR).

• Во всех исключения пакета добавили возможность передавать код исключения и предыдущее исключение (PR).

• В CI добавили тестирование в PHP 8.2 (PR).
👍3🔥3
⚡️ #yiisoftValidator

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

• Добавили хелпер PropagateOptionsHelper, что позволило избавится от дублирования кода в правилах Nested и Each.

• Доработали документацию в интерфейсах RuleInterface, PropagateOptionsInterface, RuleHandlerInterface и RuleHandlerResolverInterface.

• Доработали документацию в реализациях интерфейса для получения обработчиков правил RuleHandlerContainer и SimpleRuleHandlerContainer.
👍3
⚡️ #yiisoftValidator

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

• Вызов метода ValidationContext::isAttributeMissing() до установки набора данных теперь вызовет исключение (PR).

• Доработали документацию в ValidationContext, а также классах и интерфейсах касающихся перевода названий атрибутов (PR).
👍2🔥2
⚡️ #yiisoftValidator

Продолжаем готовить документацию по Yii Validator.

• Добавили описание для правила Ip (PR).

• Добавили описание для интерфейса ValidatorInterface (PR).
👍3
⚡️ #yiisoftValidator

Продолжаем работу над документацией Yii Validator.

• Добавили описания phpdoc для правила Url, а также переименовали параметр enableIDN в enableIdn (PR).

• Добавили описания phpdoc для правила Email, а также переименовали параметры enableIDN в enableIdn и checkDNS в checkDns (PR).
👍3
⚡️ #yiisoftValidator

В Yii Validator в контексте валидации переименовали параметр, показывающий были ли в процессе валидации ошибки, переименовали в yii-validator-previousRulesErrored (PR).
👍4
⚡️ #yiisoftValidator

В Yii Validator исправили ошибки Psalm (PR) и доработали документацию:
- для интерфейса валидатора, валидатора и правил Boolean, Ip, IsTrue (PR);
- для классов Error, Result и хелпера RulesDumper (PR).
👍3
⚡️ #yiisoftValidator

Несколько доработок в Yii Validator.

• Добавили документацию и переименовали правила (PR):
- BooleanBooleanValue,
- IsTrueTrueValue.

• Добавили документацию к правилам Regex, Number, In и HasLength, а также немного поправили документацию в других правилах (PR).
👍3
#yiisoftValidator #ПервыйРелиз #МажорныйРелиз #Релиз

🎁 Yii Validator 1.0

Первая стабильная версия валидатора выпущена 🎉

Пакет позволяет проверять данные в любом формате — массивы, объекты, скалярные значения и т. д. Например, валидация объекта будет выглядеть следующим образом:

use Yiisoft\Validator\Rule\AtLeast;
use Yiisoft\Validator\Rule\Email;
use Yiisoft\Validator\Rule\Length;
use Yiisoft\Validator\Rule\Number;
use Yiisoft\Validator\Rule\Required;
use Yiisoft\Validator\Validator;

#[AtLeast(['email', 'phone'])]
final class Person
{
public function __construct(
#[Required]
#[Length(min: 2)]
public ?string $name = null,

#[Number(min: 21)]
public ?int $age = null,

#[Email]
public ?string $email = null,

public ?string $phone = null,
) {
}
}

$person = new Person(
name: 'John',
age: 17,
email: 'john@example.com',
phone: null
);

$result = (new Validator())->validate($person);

Результат валидации — объект, который позволяет проверить, прошла ли проверка успешно:

$result->isValid();

А также получить все ошибки:

$result->getErrorMessages();

Основные возможности

- Поддержка произвольных наборов данных.
- Обработка вложенных структур (один к одному и один ко многим).
- Поддержка PHP атрибутов.
- Форматирование и перевод сообщений об ошибках.
- Перевод имён атрибутов.
- Условная валидация.
- Возможность передать контекст валидации в обработчики правил.
- Основные правила валидации из коробки.
- Поддержка DI-контейнера для получения обработчиков правил с зависимостями.
- Экспорт правил для использования на фронтенде.

Подробности смотрите в Readme и документации.

📗 А также читайте обзорную статью «Yii Validator — простой и мощный» от Сергея Предводителева.
🔥18👍8🎉5👏1🏆1
#yiisoftValidator #МинорныйРелиз #Релиз

🎁 Yii Validator 1.1.0

• Добавлен иммутабельный метод Validator::withDefaultSkipOnEmptyCondition(), позволяющий указать условие "пустоты" по умолчанию.

• Добавлено новое правило StringValue, которое проверяет, что значение является строкой.

• В WhenEmpty добавлена проверка на "пустоту" iterable-объектов.

• В трейте CountableLimitTrait в качестве лимита разрешено указывать 0.

😎 Релиз подготовили Алексей Рогачёв, Александр Макаров и Сергей Предводителев.
🔥8
#yiisoftValidator #МинорныйРелиз #Релиз

🎁 Yii Validator 1.2

• Добавлено правило OneOf.

• В методах Result::getAttributeErrorMessagesIndexedByPath() и Result::getErrorMessagesIndexedByPath() добавлен параметр $escape, который позволяет указать экранируемый символ в пути валидируемого элемента или полностью отключить экранирование.

• Добавлен сборщик отладочной информации для Yii Debug.

• Для параметра $skipOnEmpty указан более конкретный psalm-тип.

• В условиях "пустоты" значений NeverEmpty, WhenEmpty, WhenMissing и WhenNull параметр $isAttributeMissing сделан опциональным.

• Выполнен небольшой рефакторинг метода EmailHandler::validate().

• Исправлено ошибочное экранирование символа * при использовании метода Error::getValuePath(true).
👍6👾1
#yiisoftValidator #МинорныйРелиз #Релиз

🎁 Yii Validator 1.3

• Добавлено правило Image для валидации размеров изображения.

• Добавлены правила Date, DateTime и Time для валидации даты/времени.

• В классе Result добавлены методы addErrorWithFormatOnly() и addErrorWithoutPostProcessing().

• Уточнены psalm-типы в классе Result.
👍10👾1
#yiisoftValidator #МинорныйРелиз #Релиз

🎁 Yii Validator 1.4

• Добавлены правила, проверяющие тип значения — boolean, float, integer и string.

• Добавлено правило UniqueIterable, которое проверяет, что массив содержит только уникальные значения.

• Добавлено правило AnyRule, позволяющее связывать правила логическим "ИЛИ".

• В объекте Result добавлены новые методы:
- getFirstErrorMessagesIndexedByPath(),
- getFirstErrorMessagesIndexedByAttribute(),
- add().
👍11👾2
#yiisoftValidator #ПатчРелиз #Релиз

🎁 Yii Validator 1.4.1

• Устранено "протекание" параметров в контексте валидации, что в некоторых случаях приводило к ошибкам при выполнении валидации через контекст ($context->validate()).
👍4👾1
#yiisoftValidator #МажорныйРелиз #Релиз

🎁 Yii Validator 2.0

• Добавлено правило InEnum, проверяющее, что значение соответствует одному из значений типизированного перечисления.

• В именах классов/трейтов/методов/переменных слово "attribute" заменено на "property".

• Переименованы правила:
- AtLeastFilledAtLeast;
- OneOfFilledOnlyOneOf.

• При создании правила FilledAtLeast добавлена проверка, что значение свойства $min меньше или равно количеству проверяемых свойств.

• Добавлен PHP-атрибут Label позволяющий задать имя свойства в сообщениях об ошибках валидации.

• Интерфейс RuleWithOptionsInterface переименован в DumpedRuleInterface.

• Метод getName() перемещён из метода RuleInterface в DumpedRuleInterface.

• Параметр $rules в методе RulesNormalizer::normalize() сделан опциональным.

• Выполнен рефакторинг метода Result::add(): для повышения производительности использование метода array_merge() вынесено за цикл foreach.

• Выполнен рефакторинг обработчика правила Json. Для проверки вместо регулярного выражения теперь используются встроенные функции json_validate(), json_decode() и json_last_error().

• Изменён тип параметра $escape в методе Error::getValuePath() с bool|string|null на string|null.

• Изменён тип параметра $skipOnEmpty в конструкуторах правил с mixed на bool|callable|null.

• Изменён тип параметра $rule в методе RuleHandlerInterface::validate() с object на RuleInterface.

• Для правил, не реализающих DumpedRuleInterface, RulesDumper теперь использует в качестве имени полное имя класса правила.

• Встроенные правила валидации в качестви имени правила теперь возвращают полное имя класса.

• В контекст валидации добавлен параметр Each::PARAMETER_EACH_KEY, доступный во время обработки правила Each и содержащий текущий ключ.

• В сообщения об ошибках валидации добавлены имена валидируемых свойств.

• Во встроенных правила в сообщения о некорректном типе валидируемого значения добавлен тип значения.

• Улучшены сообщения об ошибках валидации в правилах Json, FilledOnlyOneOf и FilledAtLeast.

• Исправлено: правила валидации, заданные в виде PHP-атрибутов объекта, не учитывались при нормализации через RulesNormalizer::normalize().

• Исправлено: при использовании правила Nested имя свойства не передавалось в сообщения об ошибках валидации.

• Исправлено: при использовании правила Each в сообщение о некорректном ключе передавался тип значения вместо типа ключа.

• Уточнены типы в psalm-аннотациях в классе Result.

• Минимальная требуемая версия PHP поднята до 8.1.

• Добавлен перевод сообщений об ошибках валидации на немецкий язык.

Инструкция по обновлению на эту мажорную версию описана в файле UPGRADE.md.
👍172🔥2👾1
#yiisoftValidator #МинорныйРелиз #Релиз

🎁 Yii Validator 2.1

• Правила валидации объекта, описанные в виде PHP атрибутов теперь объединяются с правилами, заданными в методе getRules() при реализации интерфейса RulesProviderInterface.

• Выполнен рефакторинг правила Ip с более плотным использованием пакета yiisoft/network-utilities.

• Добавлен метод Ip::getIpRanges().

• Методы Ip::getRanges(), Ip::getNetworks() и Ip::isAllowed() помечены устаревшими и будут удалены в следующем мажорном релизе.
7🔥5🎉3
#yiisoftValidator #МинорныйРелиз #Релиз

🎁 Yii Validator 2.2

• В правиле Each добавлен параметр stopOnError, который позволяет прекратить валидацию следующих элементов, если текущий элемент оказался невалидным.

• Ограничение версии PHP в composer.json изменено на ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0.

• Минимальная требуемая версия yiisoft/strings поднята до ^2.6.

• Небольшой рефакторинг с использованием возможностей, появившихся в PHP 8.1.

• Исправлена ошибка в правиле Email, которая возникала в граничном случае, когда используется IDN, пользовательское регулярное выражение и включена DNS-проверка.

• Исправлена ошибка, возникающая при обработке правила URL в PHP 8.4, когда валидируется пустая строка.

• Исправлена обработка хука для вложенных объектов, реализующих PostValidationHookInterface, когда используется правило Nested с заданными правилами.

• Исправлен русский перевод сообщения об ошибке для правила FilledAtLeast.
👍11👾1
#yiisoftValidator #МинорныйРелиз #Релиз

🎁 Yii Validator 2.3

• Добавлено правило валидации Uuid, проверяющее, что значение является строкой с корректным UUID.
👍151👾1
#yiisoftValidator #МинорныйРелиз #Релиз

🎁 Yii Validator 2.4

• В правиле Nested добавлена возможность использовать callable-правила.

• Добавлена возможность использовать stringable-объекты в качестве сообщения об ошибке.

• Исправлена некорректная работа опции WhenMissing в правиле Nested.

• Исправлена некорректная работа в некоторых случаях использования правила Nested внтури Each.
👍6👾2
#yiisoftValidator #МинорныйРелиз #Релиз

🎁 Yii Validator 2.5

• В объекте Result, представляющем результат валидации, добавлен метод getPropertyErrorMessagesByPath(), возвращающий список ошибок по заданному пути.
👍3👾1