vjik/yii-validator-scenarios

Yii Validator 的场景功能

1.0.0 2023-02-22 13:25 UTC

This package is auto-updated.

Last update: 2024-09-22 17:01:25 UTC


README

Yii Validator Scenarios


Latest Stable Version Total Downloads Build status Mutation testing badge type-coverage static analysis psalm-level

该包提供了实现 Yii Validator 场景功能的验证规则 On

要求

  • PHP 8.0 或更高版本。

安装

可以使用 composer 安装此包。

composer require vjik/yii-validator-scenarios

一般用法

场景功能通过规则 On 和验证上下文参数实现。

配置规则

use Vjik\Yii\ValidatorScenarios\On;
use Yiisoft\Validator\Rule\Email;
use Yiisoft\Validator\Rule\Length;
use Yiisoft\Validator\Rule\Required;

final class UserDto
{
    public function __construct(
        #[On(
            'register',
            [new Required(), new Length(min: 7, max: 10)]
        )]
        public string $name,

        #[Required]
        #[Email]
        public string $email,

        #[On(
            ['login', 'register'],
            [new Required(), new Length(min: 8)],
        )]
        public string $password,
    ) {
    }
}

或者相同,没有属性

use Vjik\Yii\ValidatorScenarios\On;
use Yiisoft\Validator\Rule\Email;
use Yiisoft\Validator\Rule\Length;
use Yiisoft\Validator\Rule\Required;
use Yiisoft\Validator\RulesProviderInterface;

final class UserDto implements RulesProviderInterface
{
    public function __construct(
        public string $name,
        public string $email,
        public string $password,
    ) {
    }

    public function getRules(): iterable
    {
        return [
            'name' => new On(
                'register',
                [new Required(), new Length(min: 7, max: 10)],
            ),
            'email' => [new Required(), new Email()],
            'password' => new On(
                ['login', 'register'],
                [new Required(), new Length(min: 8)],
            ),
        ];
    }
}

通过上下文将场景传递给验证器

use Yiisoft\Validator\ValidationContext;
use Yiisoft\Validator\Validator;

$result = (new Validator())->validate(
    $userDto, 
    context: new ValidationContext([
        On::SCENARIO_PARAMETER => $scenario,
    ]),
);

根据场景应用规则

register

login

无场景

On 规则参数

$scenario

规则 $rules 所在的场景。如果规则始终使用,则为 null。默认为 null

$rules

根据 $scenario 应用的规则。默认为空数组。

$not

是否应反转场景检查。当此参数设置为 true 时,验证器检查当前场景是否在 $scenario 中,如果不是,则应用 $rules。默认为 false

$skipOnEmpty

是否跳过 $rules 的空值,以及将哪些值视为空值。默认为 null

$skipOnError

一个布尔值,其中 true 表示在前面一个验证出错时跳过 $rules,而 false 表示不跳过。默认为 false

$when

允许仅在特定条件下应用 $rules 的闭包。默认为 null

测试

单元测试

该包使用 PHPUnit 进行测试。要运行测试

./vendor/bin/phpunit

突变测试

该包使用 Infection 突变框架和 Infection 静态分析插件 进行测试。要运行它

./vendor/bin/roave-infection-static-analysis-plugin

静态分析

使用 Psalm 对代码进行静态分析。要运行静态分析

./vendor/bin/psalm

许可证

Yii Validator Scenarios 是免费软件。它根据 BSD 许可证的条款发布。有关更多信息,请参阅 LICENSE