Metadata

3.4 版本
维护中的版本

ClassMetadata 类对一个给定的类的“全部已配置约束”进行呈现和管理。

属性 

Validator组件可以验证public, protected或private属性。下例演示了如何验证 Author$firstName 属性令其至少包含三个字符:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// ...
use Symfony\Component\Validator\Mapping\ClassMetadata;
use Symfony\Component\Validator\Constraints as Assert;
 
class Author
{
    private $firstName;
 
    public static function loadValidatorMetadata(ClassMetadata $metadata)
    {
        $metadata->addPropertyConstraint('firstName', new Assert\NotBlank());
        $metadata->addPropertyConstraint(
            'firstName',
            new Assert\Length(array("min" => 3))
        );
    }
}

Getters 

约束(constraints)也可以被用在返回值或是任何public getter 方法上,即方法名以gethasis开头的方法。这个功能允许你动态地验证对象。

假设,出于安全原因,你希望验证password字段“不能与用户的第一个名字一样”,创建一个名为 isPasswordSafe 的public方法,以定义自定义验证:

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

然后,把Validator组件的配置信息添加到这个类中:

1
2
3
4
5
6
7
8
9
10
11
12
13
// ...
use Symfony\Component\Validator\Mapping\ClassMetadata;
use Symfony\Component\Validator\Constraints as Assert;
 
class Author
{
    public static function loadValidatorMetadata(ClassMetadata $metadata)
    {
        $metadata->addGetterConstraint('passwordSafe', new Assert\IsTrue(array(
            'message' => 'The password cannot match your first name',
        )));
    }
}

Classes 

某些约束能够让你验证整个对象。例如,Callback 约束就是一个可以应用到类自身的约束。

本文,包括例程代码在内,采用的是 Creative Commons BY-SA 3.0 创作共用授权。

登录symfonychina 发表评论或留下问题(我们会尽量回复)