Поддержка аннотаций для валидатора форм в WYMW
Использование аннотаций позволяет указать соответствующий валидатор, сценарий или поле для проверки.
Установка
composer require itwmw/engine-validate-attributes
Использование в контроллере
use Itwmw\Validate\Attributes\Validator;
class UserController
{
#[Validator(validate: UserValidate::class, scene: 'login')]
public function login()
{
}
#[Validator(validate: UserValidate::class, fields: ['user', 'pass'])]
public function register()
{
}
}
Validator имеет три параметра:
$validate
— полное пространство имён валидатора;$scene
— название сценария, если указано, то параметр $fields
не применяется;$fields
— массив полей для проверки.Применение в промежуточном программном обеспечении Если вы используете предоставленное валидатором промежуточное ПО, вы можете зарегистрировать расширение в конфигурации промежуточного ПО:
use Itwmw\Validate\Attributes\ValidateAttributesFactory;
use Itwmw\Validate\Middleware\ValidateMiddlewareConfig;
ValidateMiddlewareConfig::instance()->setValidateFactory(new ValidateAttributesFactory());
После этого промежуточное ПО автоматически получит указанный валидатор для выполнения проверки.
Автономное использование Вы можете получить указанный валидатор следующим образом:
$validate = (new Itwmw\Validate\Attributes\ValidateAttributesFactory())->getValidate(UserController::class, 'login');
// or
$validate = get_class_method_validator(UserController::class, 'login');
Будет возвращён массив валидаторов. Если валидатор не указан, будет возвращено false
.
Метод getValidate
требует двух параметров:
$controller
— имя контроллера или класса;$scene
— имя метода или сценария (не обязательно).Использование аннотаций свойств класса В настоящее время аннотации поддерживают все встроенные правила валидатора и обработчики данных.
Определение:
class UserInfo
{
#[Required]
#[ChsAlphaNum]
#[Between(min:1, max: 10)]
#[Message('昵称')]
public string $nickname;
#[Required]
#[Email]
#[Message(messages: [
Email::class => '邮箱格式错误',
Required::class => '邮箱不能为空'
])]
public string $email;
#[Required]
#[ArrayRule('@keyInt')]
#[Preprocessor([0], ProcessorExecCond::WHEN_EMPTY)]
#[Postprocessor('array_unique', ProcessorExecCond::WHEN_NOT_EMPTY, ProcessorParams::Value)]
public array $group;
#[StringRule]
#[Message(name: '备注')]
#[Preprocessor('trim', ProcessorExecCond::WHEN_NOT_EMPTY, ProcessorParams::Value)]
#[Postprocessor('removeXss', ProcessorExecCond::WHEN_NOT_EMPTY, ProcessorParams::Value)]
public ?string $remark = '';
public function removeXss($value): string
{
// 处理xss demo,仅供展示
$value = preg_replace('/<script.*?>.*?<\/script>/si', '', $value);
return strip_tags($value);
}
}
Проверка:
$data = validate_attribute(UserInfo::class, [
'nickname' => 'test',
'email' => '123@qq.com',
'remark' => '<script>alert(1)</script>备注说明'
]);
print_r($data);
//UserInfo Object
//(
// [nickname] => test
// [email] => 123@qq.com
// [group] => Array
// (
// [0] => 0
// )
//
// [remark] => 备注说明
//)
Объяснение:
— $nickname
— обязательное поле, может содержать только китайские иероглифы, буквы и цифры, длина от 1 до 10 символов, имя поля — «昵称»;
— $email
— обязательное поле, должен быть формат электронной почты, если пусто, выдаётся сообщение «邮箱不能为空», если формат не соответствует, выдаётся сообщение «邮箱格式错误»;
— $group
— обязательное поле, должно быть массивом, ключи массива должны быть целыми числами, значение по умолчанию [0]
, после прохождения проверки используется array_unique
для удаления дубликатов;
— $remark
— необязательное поле, если не пусто, используется trim
для удаления пробелов с обеих сторон, затем используется removeXss
для удаления xss, имя поля — «备注»;
— removeXss
— метод пользовательского обработчика данных;
— ProcessorExecCond
— время выполнения обработчика данных, есть три значения:
* ProcessorOptions::WHEN_NOT_EMPTY
— выполнение, когда поле не пустое;
* ProcessorOptions::WHEN_EMPTY
— выполнение, когда поле пустое;
* ProcessorOptions::ALWAYS
— всегда выполняется, поведение по умолчанию;
— ProcessorParams
— источник параметров обработчика данных, четыре значения:
* ProcessorParams::Value
— использование значения поля в качестве параметра;
* ProcessorParams::Attribute
— использование ключа поля в качестве параметра;
* ProcessorParams::OriginalData
— использование исходных данных в качестве параметра;
* ProcessorParams::DataAttribute
— предоставление класса DataAttribute
в качестве параметра;
— ProcessorOptions
— дополнительные параметры обработчика данных, два значения:
* ProcessorOptions::MULTIPLE
— используется при добавлении нескольких обработчиков к одному полю, эта библиотека обрабатывает автоматически;
* ProcessorOptions::VALUE_IS_ARRAY
— используется, когда значение является массивом, в этой библиотеке не требуется.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )