Bonjour,
J'essaie de créer une contrainte de validation personnalisée mais je rencontre beaucoup de difficultés.
Tout part de cette classe :
Mon objectif est de créer une contrainte de validation qui vérifie qu'entre DateFin et DateDebut, il y a exactement 30 jours.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59 namespace App\Entity; use Doctrine\ORM\Mapping as ORM; use Symfony\Component\Validator\Constraints as Assert; use Validateur\Contrainte\ProgrammeDuree; /** * @ORM\Entity(repositoryClass="App\Repository\ProgrammeRepository") */ class Programme { /** * @ORM\Id() * @ORM\GeneratedValue() * @ORM\Column(type="integer") */ private $id; /** * @ORM\Column(type="datetime") */ private $datedebut; /** * @ORM\Column(type="datetime") * @ProgrammeDuree(message="Mauvaise période") */ private $datefin; public function getId(): ?int { return $this->id; } public function getDatedebut(): ?\DateTimeInterface { return $this->datedebut; } public function setDatedebut(\DateTimeInterface $datedebut): self { $this->datedebut = $datedebut; return $this; } public function getDatefin(): ?\DateTimeInterface { return $this->datefin; } public function setDatefin(\DateTimeInterface $datefin): self { $this->datefin = $datefin; return $this; } }
Pour cela, dans le dossier src de mon projet j'ai créé le dossier Validateur et ensuite Contrainte comme sous dossier de Validateur.
Puis :
Constraint Class
Ensuite :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 <?php namespace Validateur\Constrainte; use Symfony\Component\Validator\Constraint; /** *@Annotation */ class ProgrammeDuree extends Constraint { public $message = 'La durée n\'excède pas trente (30) jours'; /** * Get class constraints and properties * * @return array */ public function getTargets() { return array(self::CLASS_CONSTRAINT, self::PROPERTY_CONSTRAINT); } }
Validator Class
A l'exécution j'ai le message d'erreur suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 <?php namespace App\Validateur\Contrainte; use Symfony\Component\Validator\Constraint; use Symfony\Component\Validator\ConstraintValidator; class ProgrammeDureeValidator extends ConstraintValidator { public function validate($value, Constraint $constraint) { $date1 = $this->context->getRoot->get('datedebut')->getData(); $date2 = $this->context->getRoot->get('datefin')->getData(); if (($date1->diff($date2)) != 30 ) { $this->context->addViolation ( $constraint->message, array('%string%' => $value) ); return false; } return true; } } ?>
Je demande votre concours pour débloquer la situation s'il vous plait.[Semantical Error] The annotation "@Validateur\Contrainte\ProgrammeDuree" in property App\Entity\Programme::$datefin does not exist, or could not be auto-loaded.
Partager