Как сделать флажок, который установлен по умолчанию с помощью Symfony2 Form Builder? - PullRequest
17 голосов
/ 06 марта 2012

Я не нашел простого способа установить флажок по умолчанию. Это не может быть так сложно, так чего мне не хватает?

Ответы [ 12 ]

36 голосов
/ 11 июня 2012

Вы также можете просто установить атрибут attr в методе buildForm компоновщика форм:

$builder->add('isPublic', 'checkbox', array(
    'attr' => array('checked'   => 'checked'),
));
19 голосов
/ 12 августа 2013

В Symfony> = 2.3 «property_path» стал «сопоставленным».

Итак:

$builder->add('checkboxName', 'checkbox', array('mapped' => false,
    'label' => 'customLabel',
    'data' => true, // Default checked
));
18 голосов
/ 06 марта 2012

Вы бы просто установили значение в вашей модели или сущности в значение true, а затем передали его в FormBuilder, после чего оно должно быть проверено.

Если вы посмотрите на первый пример в документации :

Создается новая задача, затем выполняется setTask, и эта задача добавляется в FormBuilder. Если вы делаете то же самое с вашим флажком

$object->setCheckboxValue(true);

и передайте объект, вы должны увидеть флажок.

Если он не работает должным образом, вернитесь с примером кода, воспроизводящего ошибку.

16 голосов
/ 21 февраля 2013

Настройка опции 'data' работает у меня.Я создаю не основанную на сущности форму:

$builder->add('isRated','checkbox', array(
    'data' => true
));
8 голосов
/ 16 января 2013

В TWIG

Если вы хотите сделать это непосредственно в шаблоне:

{{ form_widget(form.fieldName, { 'attr': {'checked': 'checked'} }) }}
4 голосов
/ 19 июня 2012

Используйте метод FormBuilder :: setData ():

$builder->add('fieldName', 'checkbox', array('property_path' => false));
$builder->get('fieldName')->setData( true );

"property_path" в false, поскольку это поле не для сущности (в противном случае вам следует установить значение по умолчанию в true, используя установщик сущности).

Флажок будет установлен по умолчанию.

1 голос
/ 23 января 2018

Чтобы завершить предыдущий ответ , с множественным полем , вы можете сделать это, чтобы проверить все варианты:

   'choice_attr' => function ($val, $key, $index) {
       return array('checked' => true);
   }

https://symfony.com/doc/3.3/reference/forms/types/choice.html#choice-attr

1 голос
/ 08 августа 2015
UserBundle\Entity\User

давайте предположим, что у вас есть сущность с именем (Пользователь), и у нее есть член с именем isActive. Вы можете установить флажок по умолчанию, установив для isActive значение 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);
1 голос
/ 24 января 2015

Согласно документации: http://symfony.com/doc/current/reference/forms/types/checkbox.html#value

Чтобы установить флажок или переключатель по умолчанию, используйте параметр данных.

1 голос
/ 23 января 2014

Вы должны внести изменения во временный объект, где хранится сущность, прежде чем отображать ее в форме. Примерно так:

<?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
            ));
    }
}
...