2024-05-06 20:40:05 +00:00
|
|
|
|
---
|
2024-10-30 17:04:36 +00:00
|
|
|
|
date: 20201117
|
2024-05-06 20:40:05 +00:00
|
|
|
|
id: b632a78b-9e93-4b56-8cfe-daa3e4db12a2
|
|
|
|
|
title: Define Constraints as Attributes
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
# Syntax
|
|
|
|
|
|
|
|
|
|
## Annotations
|
|
|
|
|
|
|
|
|
|
``` php
|
|
|
|
|
// src/Entity/Author.php
|
|
|
|
|
namespace App\Entity;
|
|
|
|
|
|
|
|
|
|
// ...
|
|
|
|
|
use Symfony\Component\Validator\Constraints as Assert;
|
|
|
|
|
|
|
|
|
|
class Author
|
|
|
|
|
{
|
|
|
|
|
/**
|
|
|
|
|
* @Assert\Choice(
|
|
|
|
|
* choices = { "fiction", "non-fiction" },
|
|
|
|
|
* message = "Choose a valid genre."
|
|
|
|
|
* )
|
|
|
|
|
*/
|
|
|
|
|
private $genre;
|
|
|
|
|
|
|
|
|
|
// ...
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
## Attributes
|
|
|
|
|
|
|
|
|
|
``` php
|
|
|
|
|
// src/Entity/Author.php
|
|
|
|
|
namespace App\Entity;
|
|
|
|
|
|
|
|
|
|
// ...
|
|
|
|
|
use Symfony\Component\Validator\Constraints as Assert;
|
|
|
|
|
|
|
|
|
|
class Author
|
|
|
|
|
{
|
|
|
|
|
#[Assert\Choice(
|
|
|
|
|
choices: ['fiction', 'non-fiction'],
|
|
|
|
|
message: 'Choose a valid genre.',
|
|
|
|
|
)]
|
|
|
|
|
private $genre;
|
|
|
|
|
|
|
|
|
|
// ...
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
# Caveats
|
|
|
|
|
|
|
|
|
|
The following composite constraints can't be used with attributes:
|
|
|
|
|
|
|
|
|
|
- All
|
|
|
|
|
- [AtLeastOneOf Constraint](20201116134435-atleastoneof_constraint)
|
|
|
|
|
- Collection
|
|
|
|
|
- [Compound Constraint](20201116124210-compound_constraint) (abstract)
|
|
|
|
|
- Existance (abstract)
|
|
|
|
|
- Required
|
|
|
|
|
- Optional
|
|
|
|
|
- [Sequentially Constraint](20201116124823-sequentially_constraint)
|
|
|
|
|
|
|
|
|
|
The reason is that they would require nested attributes and PHP doesn’t
|
|
|
|
|
support that feature yet
|