跳到内容

元数据

编辑此页

The ClassMetadata 类表示并管理给定类的所有已配置约束。

属性

验证器组件可以验证 public、protected 或 private 属性。 以下示例展示了如何验证 Author 类的 $firstName 属性至少包含 3 个字符

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// ...
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Component\Validator\Mapping\ClassMetadata;

class Author
{
    private string $firstName;

    public static function loadValidatorMetadata(ClassMetadata $metadata): void
    {
        $metadata->addPropertyConstraint('firstName', new Assert\NotBlank());
        $metadata->addPropertyConstraint(
            'firstName',
            new Assert\Length(["min" => 3])
        );
    }
}

Getter

约束也可以应用于任何 public getter 方法返回的值,这些方法的名字以 gethasis 开头。 此功能允许动态验证您的对象。

假设出于安全原因,您想要验证密码字段是否与用户的名字不匹配。 首先,创建一个名为 isPasswordSafe() 的 public 方法来定义此自定义验证逻辑

1
2
3
4
public function isPasswordSafe(): bool
{
    return $this->firstName !== $this->password;
}

然后,将验证器组件配置添加到类中

1
2
3
4
5
6
7
8
9
10
11
12
13
// ...
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Component\Validator\Mapping\ClassMetadata;

class Author
{
    public static function loadValidatorMetadata(ClassMetadata $metadata): void
    {
        $metadata->addGetterConstraint('passwordSafe', new Assert\IsTrue([
            'message' => 'The password cannot match your first name',
        ]));
    }
}

一些约束允许验证整个对象。 例如,Callback 约束是应用于类本身的通用约束。

假设该类定义了一个 validate() 方法来保存其自定义验证逻辑

1
2
3
4
5
6
7
// ...
use Symfony\Component\Validator\Context\ExecutionContextInterface;

public function validate(ExecutionContextInterface $context): void
{
    // ...
}

然后,将验证器组件配置添加到类中

1
2
3
4
5
6
7
8
9
10
11
// ...
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Component\Validator\Mapping\ClassMetadata;

class Author
{
    public static function loadValidatorMetadata(ClassMetadata $metadata): void
    {
        $metadata->addConstraint(new Assert\Callback('validate'));
    }
}
本作品,包括代码示例,根据 Creative Commons BY-SA 3.0 许可获得许可。
目录
    版本