Metadata

The ClassMetadata class represents and manages all the configured constraints on a given class.

ClassMetadata クラスは、特定のクラスで構成されたすべての制約を表し、管理します。

Properties

The Validator component can validate public, protected or private properties. The following example shows how to validate that the $firstName property of the Author class has at least 3 characters:

Validator コンポーネントは、公開、保護、または非公開のプロパティを検証できます。次の例は、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 $firstName;

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

Getters

Constraints can also be applied to the value returned by any public getter method, which are the methods whose names start with get, has or is. This feature allows validating your objects dynamically.

制約は、名前が get、has、または is で始まるメソッドである public gettermethod によって返される値にも適用できます。この機能により、オブジェクトを動的に検証できます。

Suppose that, for security reasons, you want to validate that a password field doesn't match the first name of the user. First, create a public method called isPasswordSafe() to define this custom validation logic:

セキュリティ上の理由から、パスワード フィールドがユーザーの名前と一致しないことを検証するとします。まず、isPasswordSafe() というパブリック メソッドを作成して、このカスタム検証ロジックを定義します。
1
2
3
4
public function isPasswordSafe()
{
    return $this->firstName !== $this->password;
}

Then, add the Validator component configuration to the class:

次に、Validator コンポーネント構成をクラスに追加します。
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)
    {
        $metadata->addGetterConstraint('passwordSafe', new Assert\IsTrue([
            'message' => 'The password cannot match your first name',
        ]));
    }
}

Classes

Some constraints allow validating the entire object. For example, the Callback constraint is a generic constraint that's applied to the class itself.

一部の制約では、オブジェクト全体を検証できます。たとえば、Callback 制約は、クラス自体に適用される汎用制約です。

Suppose that the class defines a validate() method to hold its custom validation logic:

クラスがその customvalidation ロジックを保持するために validate() メソッドを定義するとします。
1
2
3
4
5
6
7
// ...
use Symfony\Component\Validator\Context\ExecutionContextInterface;

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

Then, add the Validator component configuration to the class:

次に、Validator コンポーネント構成をクラスに追加します。
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)
    {
        $metadata->addConstraint(new Assert\Callback('validate'));
    }
}