Metadata
Warning: You are browsing the documentation for Symfony 6.2, which is no longer maintained.
Read the updated version of this page for Symfony 7.1 (the current stable version).
Metadata
The ClassMetadata class represents and manages all the configured constraints on a given class.
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:
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])
);
}
}
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.
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:
1 2 3 4
public function isPasswordSafe(): bool
{
return $this->firstName !== $this->password;
}
Then, add the Validator component configuration to the class:
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',
]));
}
}
Classes
Some constraints allow validating the entire object. For example, the Callback constraint is a generic constraint that's applied to the class itself.
Suppose that the class defines a validate()
method to hold its custom
validation logic:
1 2 3 4 5 6 7
// ...
use Symfony\Component\Validator\Context\ExecutionContextInterface;
public function validate(ExecutionContextInterface $context): void
{
// ...
}
Then, add the Validator component configuration to the class:
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'));
}
}