J'ai le formulaire suivant:
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('type', ChoiceType::class, array(
'expanded' => true,
'multiple' => false,
'choices' => array(
'Friend' => 'friend',
'Guide' => 'guide'
)
));
}
Comment puis-je cocher 'Friend' pour être coché par défaut lorsque le formulaire est rendu?
Utilisez l'option empty_data
du champ de formulaire. (pas data
car il écrasera toutes les données publiées à moins que vous ne les définissiez de manière dynamique).
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('type', ChoiceType::class, array(
'expanded' => true,
'multiple' => false,
'choices' => array(
'Friend' => 'friend',
'Guide' => 'guide'
),
'empty_data' => 'friend'
));
}
Une autre option pour les cas complexes consiste à utiliser Sf Dynamic Form Events .
Je pense que vous devriez essayer avec l'option data
, mais c'est juste dans le cas où vous n'avez même pas de données sauvegardées dans votre objet, car il remplacera le reste.
Important: C'est utile pour créer une action, mais pas pour une action d'édition.
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('type', ChoiceType::class, array(
'expanded' => true,
'multiple' => false,
'choices' => array(
'Friend' => 'friend',
'Guide' => 'guide'
),
'data' => 'friend'
));
}
Extrait :
Lorsque vous créez un formulaire, chaque champ affiche initialement la valeur du fichier propriété correspondante de l'objet domaine du formulaire (si un objet est lié au formulaire). Si vous souhaitez remplacer la valeur initiale du fichier forme ou juste un champ individuel, vous pouvez le définir dans l'option de données
UPDATE Si vous avez besoin d'une valeur vide:
Comme réponse ci-dessous, remplacez data
par empty_data
si vous avez besoin dans tous les cas de mettre à jour la valeur par défaut.
Je pense qu'il serait préférable de définir les valeurs initiales dans le constructeur d'entité:
public function __construct()
{
$this->exercises = new ArrayCollection();
$this->setTitle("WOCHE#") ;
$this->setYear(date('Y'));
$this->setWeekInCalendar(Week::getCurrentWeekInCalendar());
}
Si vous ne souhaitez pas remplacer la valeur d'une édition, vous pouvez le faire:
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) {
$form = $event->getForm();
$form->add(
'type',
ChoiceType::class,
[
'expanded' => true,
'multiple' => false,
'choices' => [
'Friend' => 'friend',
'Guide' => 'guide'
],
'data' => $event->getData() ?: 'friend'
]);
});
}