embedded forms et form_errors
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:
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:
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:
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:
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-