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)
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));
    }
}
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
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';
	}
}
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
 
...
{% 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>
...
Je n'arrive pas à cerner d'où vient le problème.
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-