plop,
J'ai un problème pour afficher les erreurs d'un formulaire embarqué : celles-ci ne s'affichent pas ds mon template via la fonction form_errors, pourtant, elles sont bien déclenchées ds le contrôleur.
Donc
{{ form_errors(form.performer.id) }} n'affiche rien
mais dans mon contrôleur :
print_r($form->getErrors()); affiche
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 Array ( [0] => Symfony\Component\Form\FormError Object ( [messageTemplate:protected] => performer.id value should not be blank [messageParameters:protected] => Array ( ) ) [1] => Symfony\Component\Form\FormError Object ( [messageTemplate:protected] => performer.fullname value should not be blank [messageParameters:protected] => Array ( ) ) )
Voici mon code
class TimesheetForm (main form)
class UserAutoCompletionType (embbeded form)
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 ... use Symfony\Component\Form\AbstractType; ... class TimesheetForm extends AbstractType { protected $translator; public function __construct(Translator $translator) { $this->translator = $translator; } public function buildForm(FormBuilder $builder, array $options) { $builder->add('description', 'textarea'); $userAutoCompletionType = new UserAutoCompletionType(); $userAutoCompletionType->setUser($performer); $userAutoCompletionType->setTranslator($this->translator); $builder->add('performer', new UserAutoCompletionType(), array('data'=>$userAutoCompletionType, 'label'=>'Prestataire','property_path'=>false)); } }
Et mon template
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 class UserAutoCompletionType extends AbstractType { /** * @Assert\NotBlank( * message = "performer.id value should not be blank" * ) */ public $id; /** * @Assert\NotBlank( * message = "performer.fullname value should not be blank" * ) */ public $fullname; protected $translator; protected $user; public function __construct() { //parent::__construct(); } public function setUser($user) { $this->user = $user; } public function setTranslator($translator) { $this->translator = $translator; } public function buildForm(FormBuilder $builder, array $options) { $builder->add('id', 'hidden', array('label'=>'', 'data' => ($this->user ? $this->user->getId() : null))); $builder->add('fullname', null, array('label'=>'Prestataire', 'data' => ($this->user ? $this->user->getFirstname().' '.$this->user->getLastname() : ''))); } public function getDefaultOptions(array $options) { return array( 'data_class' => '\vvv\JobBundle\Form\UserAutoCompletionType' ); } public function getName() { return 'user_autocompletion_form'; } }
Je n'arrive pas à cerner d'où vient le problème.
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 ... {% if message %} <p>{{ message }}</p> {% endif %} <form action="" method="post" {{ form_enctype(form) }}> {{ form_label(form.status) }}{{ form_errors(form.status) }}{{ form_widget(form.status) }} {# {{ form_label(form.performer_text) }}{{ form_errors(form.performer_text) }}{{ form_widget(form.performer_text) }}{{ form_widget(form.performer_id) }} #} {{ form_label(form.performer) }} {{ form_errors(form.performer) }} {{ form_errors(form.performer.id) }} {{ form_errors(form.performer.fullname) }} {{ form_widget(form.performer.id) }} {{ form_widget(form.performer.fullname) }} {{ form_label(form.job_text) }}{{ form_errors(form.job_id) }}{{ form_widget(form.job_text) }}{{ form_widget(form.job_id) }} {{ form_label(form.description) }}{{ form_errors(form.description) }}{{ form_widget(form.description) }} {{ form_label(form.realisation_date) }}{{ form_errors(form.realisation_date) }}{{ form_widget(form.realisation_date) }} {{ form_label(form.realisation_time) }}{{ form_errors(form.realisation_time) }}{{ form_widget(form.realisation_time) }} {{ form_rest(form) }} <input type="submit" /> </form> ...
Peut-être qu'il n'est pas possible d'afficher les erreurs d'un formulaire embarqué via la fonction twig form_errors ?
Si vous avez une piste...
Phil-
Partager