web-dev-qa-db-ja.com

symfony2 Form Builderでデフォルトでチェックされるチェックボックスをレンダリングする方法は?

デフォルトでチェックボックスをチェックする簡単な方法は見つかりませんでした。それはそれほど難しいことではないので、私は何が欠けていますか?

17
madc

モデルまたはエンティティの値をtrueに設定し、FormBuilderに渡すだけでチェックする必要があります。

documentation の最初の例を見ると:

新しいタスクが作成され、setTaskが実行され、このタスクがFormBuilderに追加されます。チェックボックスで同じことを行う場合

$object->setCheckboxValue(true);

オブジェクトを渡すと、チェックボックスがオンになっているはずです。

期待どおりに動作しない場合は、エラーを再現したサンプルコードを返してください。

18
Sgoettschkes

フォームビルダーのbuildFormメソッドでattr属性を設定することもできます。

$builder->add('isPublic', 'checkbox', array(
    'attr' => array('checked'   => 'checked'),
));
36
Simon Kerr

Symfony 2.3以降では、「property_path」は「mapped」になりました。

そう:

$builder->add('checkboxName', 'checkbox', array('mapped' => false,
    'label' => 'customLabel',
    'data' => true, // Default checked
));
19
Leto

'data'オプションは私のために動作します。私は非エンティティベースのフォームを作成しています:

$builder->add('isRated','checkbox', array(
    'data' => true
));
16
lackovic10

TWIGで

テンプレートでこれを直接行いたい場合:

{{ form_widget(form.fieldName, { 'attr': {'checked': 'checked'} }) }}
9
Mick

FormBuilder :: setData()メソッドを使用します。

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

「property_path」をfalseにすると、これは非エンティティフィールドになります(そうでない場合は、エンティティセッターを使用してデフォルト値をtrueに設定する必要があります)。

チェックボックスはデフォルトでチェックされます。

4
eDoV

ドキュメントごとに: http://symfony.com/doc/current/reference/forms/types/checkbox.html#value

デフォルトでチェックボックスまたはラジオボタンをオンにするには、データオプションを使用します。

1
R Sun

フォームに表示する前に、エンティティが保存されている一時オブジェクトを変更する必要があります。次のようなもの:

<?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
            ));
    }
}
1
metamaker
UserBundle\Entity\User

(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
Nezar Fadle

これも機能しますが、永続的な「チェック済み」状態を認識しています

$builder->add('isPublic', 'checkbox', array(
    'empty_data' => 'on',
));

前の回答 を完了し、複数フィールドですべての選択肢をチェックすることができます:

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

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

1
Gautier

これは、複数の展開されたチェックボックスフィールドのデフォルト値を定義する方法です。 Symfony4でテストされていますが、Symfony 2.8以降で動作する必要があります。

デフォルトで1番目と2番目のチェックボックスをアクティブにする場合

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(),
        ]);

    }
}

デフォルトですべてのチェックボックスをアクティブにする場合

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(),
        ]);

    }
}
0
Zoltán Süle