Bonjour,
J'ai besoin de comparer 2 champs date de mon formulaire. Je n'utilise pas d'entité mais des tableaux php.
J'ai une perturbation avec plusieurs impacts. J'ai donc créé 2 types disruptionType et ImpactType
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 class DisruptionType extends AbstractType { public function buildForm(FormBuilderInterface $builder, array $options) { $builder->add( 'startDate', 'datetime', array( 'date_widget' => 'single_text', 'time_widget' => 'choice', 'input' => 'string', 'date_format' => 'dd/MM/yyyy', 'required' => false, 'constraints' => array( new NotBlank(), ) ) ); $builder->add( 'endDate', 'datetime', array( 'date_widget' => 'single_text', 'time_widget' => 'choice', 'input' => 'string', 'date_format' => 'dd/MM/yyyy', 'required' => false, 'constraints' => array( new GreaterThanField( array( 'field' => 'startDate' ) ), ) ) ); $builder->add( 'impacts', 'collection', array( 'type' => 'impact', 'allow_add' => true ) ); } public function getName() { return 'disruption'; } }Pour comparer 2 dates, j'utilise un constraint validator custom où je passe le champs à comparer
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 class ImpactType extends AbstractType { public function buildForm(FormBuilderInterface $builder, array $options) { $builder->add( 'startDate', 'datetime', array( 'date_widget' => 'single_text', 'time_widget' => 'choice', 'input' => 'string', 'date_format' => 'dd/MM/yyyy', ) ); $builder->add( 'endDate', 'datetime', array( 'date_widget' => 'single_text', 'time_widget' => 'choice', 'input' => 'string', 'date_format' => 'dd/MM/yyyy', 'required' => false, 'constraints' => array( new GreaterThanField( array( 'field' => 'startDate' ) ), ) ) ); } public function getName() { return 'impact'; } }
Quand je compares 2 dates de la perturbation, le formulaire parent, je n'ai pas de problème. Mais quand il s'agit de comparer les 2 dates de l'impact, ça ne marche pas.
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 class GreaterThanField extends Constraint { public $message = 'this value must be greater than that of the field %field%.'; public $field; public function getDefaultOption() { return 'field'; } public function getRequiredOptions() { return array('field'); } } class GreaterThanFieldValidator extends ConstraintValidator { public function validate($value, Constraint $constraint) { if (!empty($value) && $value <= $this->context->getRoot()->get($constraint->field)->getData()) { $this->context->addViolation( $constraint->message, array('%field%' => $constraint->field) ); } } }
J'ai le message d'erreur suivant.$this->context->getRoot() retourne le formulaire parent. Je n'ai pas moyen d'avoir le sous-formulaire d'impact et récupérer la valeur de startDate.Child "startDate" does not exist.
ça compare avec la valeur de startDate de la perturbation au lieu de l'impact.
Avez-vous une idée du problème ou y a t-il une meilleure façon de faire?
Merci.
Partager