我没有找到任何简单的方法来完成,默认情况下只需检查一个复选框。这不是那么难,所以我错过了什么?
答案 0 :(得分:36)
您也可以在表单构建器buildForm方法中设置attr属性:
$builder->add('isPublic', 'checkbox', array(
'attr' => array('checked' => 'checked'),
));
答案 1 :(得分:19)
在Symfony> = 2.3中,“property_path”变为“已映射”。
所以:
$builder->add('checkboxName', 'checkbox', array('mapped' => false,
'label' => 'customLabel',
'data' => true, // Default checked
));
答案 2 :(得分:17)
您只需将模型或实体中的值设置为true,然后将其传递给FormBuilder,然后再进行检查。
如果您查看documentation中的第一个示例:
创建一个新任务,然后执行setTask并将此任务添加到FormBuilder。如果你对复选框做同样的事情
$object->setCheckboxValue(true);
并传递对象,您应该看到复选框已选中。
如果它没有按预期工作,请返回一些重现错误的示例代码。
答案 3 :(得分:15)
设置'data'
选项对我有用。我正在创建一个非实体形式:
$builder->add('isRated','checkbox', array(
'data' => true
));
答案 4 :(得分:8)
如果您希望直接在模板中执行此操作:
{{ form_widget(form.fieldName, { 'attr': {'checked': 'checked'} }) }}
答案 5 :(得分:4)
使用FormBuilder :: setData ()方法:
$builder->add('fieldName', 'checkbox', array('property_path' => false));
$builder->get('fieldName')->setData( true );
“property_path”为false导致这是一个非实体字段(否则,您应该使用实体设置器将默认值设置为true)。
默认情况下会选中复选框。
答案 6 :(得分:1)
这也有效,但知道持久的“已检查”状态
$builder->add('isPublic', 'checkbox', array(
'empty_data' => 'on',
));
答案 7 :(得分:1)
在表单上显示实体之前,您应该对存储实体的临时对象进行更改。像下一个:
<?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
));
}
}
答案 8 :(得分:1)
根据文件: http://symfony.com/doc/current/reference/forms/types/checkbox.html#value
要默认选中复选框或单选按钮,请使用数据选项。
答案 9 :(得分:1)
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);
答案 10 :(得分:1)
要完成previous answer,使用多个字段,您可以执行此操作来检查所有选项:
'choice_attr' => function ($val, $key, $index) {
return array('checked' => true);
}
https://symfony.com/doc/3.3/reference/forms/types/choice.html#choice-attr
答案 11 :(得分:0)
这是您可以定义多个和扩展复选框字段的默认值的方式。在Symfony4中进行了测试,但必须与Symfony 2.8及更高版本一起使用。
如果您要默认激活第一和第二复选框
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(),
]);
}
}
答案 12 :(得分:0)
我和您有同样的问题,这是我找到的唯一解决方案:
$builder->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) {
$entity= $event->getData();
$form = $event->getForm();
$form->add('active', CheckboxType::class, [
'data' => is_null($entity) ? true : $entity->isActive(),
]);
});