1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/wm-code-engine-validate-attributes

Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Поддержка аннотаций для валидатора форм в 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 )

Вы можете оставить комментарий после Вход в систему

Введение

Описание недоступно Развернуть Свернуть
Apache-2.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Язык

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/wm-code-engine-validate-attributes.git
git@api.gitlife.ru:oschina-mirror/wm-code-engine-validate-attributes.git
oschina-mirror
wm-code-engine-validate-attributes
wm-code-engine-validate-attributes
5.x