元数据
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 方法返回的值,这些方法的名字以 get
、has
或 is
开头。 此功能允许动态验证您的对象。
假设出于安全原因,您想要验证密码字段是否与用户的名字不匹配。 首先,创建一个名为 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 许可获得许可。