Je n'ai trouvé aucun moyen facile d'accomplir de simplement cocher une case par défaut. Cela ne peut pas être si difficile, alors qu'est-ce qui me manque?
Vous devez simplement définir la valeur dans votre modèle ou entité sur true et la transmettre au FormBuilder, puis elle doit être vérifiée.
Si vous regardez le premier exemple dans le documentation :
Une nouvelle tâche est créée, puis setTask est exécutée et cette tâche est ajoutée au FormBuilder. Si vous faites la même chose avec votre case à cocher
$object->setCheckboxValue(true);
et passez l'objet, vous devriez voir la case cochée.
Si cela ne fonctionne pas comme prévu, veuillez revenir avec un exemple de code reproduisant l'erreur.
Vous pouvez également simplement définir l'attribut attr dans la méthode buildForm du générateur de formulaire:
$builder->add('isPublic', 'checkbox', array(
'attr' => array('checked' => 'checked'),
));
Dans Symfony> = 2.3, "chemin_propriété" est devenu "mappé".
Alors:
$builder->add('checkboxName', 'checkbox', array('mapped' => false,
'label' => 'customLabel',
'data' => true, // Default checked
));
Réglage du 'data'
l'option fonctionne pour moi. Je crée un formulaire non basé sur une entité:
$builder->add('isRated','checkbox', array(
'data' => true
));
Si vous souhaitez le faire directement dans le modèle:
{{ form_widget(form.fieldName, { 'attr': {'checked': 'checked'} }) }}
Utilisez la méthode FormBuilder :: setData ():
$builder->add('fieldName', 'checkbox', array('property_path' => false));
$builder->get('fieldName')->setData( true );
"chemin_propriété" à false car il s'agit d'un champ non-entité (Sinon, vous devez définir la valeur par défaut sur true à l'aide de votre setter d'entité).
La case à cocher sera cochée par défaut.
Selon la documentation: http://symfony.com/doc/current/reference/forms/types/checkbox.html#value
Pour faire cocher une case ou un bouton radio par défaut, utilisez l'option de données.
Vous devez apporter des modifications à l'objet temporaire où l'entité est stockée avant de l'afficher sur le formulaire. Quelque chose comme la prochaine:
<?php
namespace KPI\AnnouncementsBundle\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
class AnnouncementType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
// ...
if ($options['data']->getDisplayed() === null) {
$options['data']->setDisplayed(true);
}
// ...
$builder
->add('displayed', 'checkbox', array(
'required' => false
));
}
}
UserBundle\Entity\User
supposons que vous avez une entité appelée (User) et un membre nommé isActive, vous pouvez définir la case à cocher par défaut en configurant isActive sur true:
$user = new User();
// This will set the checkbox to be checked by default
$user->setIsActive(true);
// Create the user data entry form
$form = $this->createForm(new UserType(), $user);
Cela fonctionne également, mais conscient de l'état "vérifié" persistant
$builder->add('isPublic', 'checkbox', array(
'empty_data' => 'on',
));
Pour compléter un réponse précédente , avec un champ multiple vous pouvez le faire pour vérifier tous les choix:
'choice_attr' => function ($val, $key, $index) {
return array('checked' => true);
}
https://symfony.com/doc/3.3/reference/forms/types/choice.html#choice-attr
C'est ainsi que vous pouvez définir les valeurs par défaut pour les champs de cases à cocher multiples et étendues. Testé dans Symfony4, mais il doit fonctionner avec Symfony 2.8 et supérieur.
si vous souhaitez activer par défaut les 1ère et 2ème cases
class MyFormType1 extends AbstractType
{
CONST FIELD_CHOICES = [
'Option 1' => 'option_1',
'Option 2' => 'option_2',
'Option 3' => 'option_3',
'Option 4' => 'option_4',
'Option 5' => 'option_5',
];
public function buildForm(FormBuilderInterface $builder, array $options)
{
$this->addSettingsField('my_checkbox_field', ChoiceType::class, [
'label' => 'My multiple checkbox field',
'choices' => self::FIELD_CHOICES,
'expanded' => true,
'multiple' => true,
'data' => empty($builder->getData()) ? ['option_1', 'option_2'] : $builder->getData(),
]);
}
}
si vous souhaitez activer toutes les cases par défaut
class MyFormType2 extends AbstractType
{
CONST FIELD_CHOICES = [
'Option 1' => 'option_1',
'Option 2' => 'option_2',
'Option 3' => 'option_3',
'Option 4' => 'option_4',
'Option 5' => 'option_5',
];
public function buildForm(FormBuilderInterface $builder, array $options)
{
$this->addSettingsField('my_checkbox_field', ChoiceType::class, [
'label' => 'My multiple checkbox field',
'choices' => self::FIELD_CHOICES,
'expanded' => true,
'multiple' => true,
'data' => empty($builder->getData()) ? array_values(self::FIELD_CHOICES) : $builder->getData(),
]);
}
}