Symfony 2.8 - FormBuilder:为什么在定义类型时需要字段?

时间:2015-12-17 21:07:49

标签: symfony required formbuilder

我正在构建一个类似于两个非强制文件的表单:

$form = $this->createFormBuilder($contact);
$form->add('name');
$form->add('subject', TextType::class);
$form->getForm();

渲染后第一个字段不是必需的(这是正常的),但为什么第二个字段是?!这段代码出了什么问题?

谢谢:)

2 个答案:

答案 0 :(得分:1)

问题必须是此表单的相关实体。名称和主题是否可以为空?如果未配置ORM,则需要手动为每个表单字段设置所需的属性。查看没有ORM的联系表单示例。

public function buildForm(FormBuilderInterface $builder, array $options) {
        $builder
                ->add('fullName', null, array(
                    'required' => true,
                    'attr' => array(
                        'placeholder' => 'Name',
                        'class' => 'text gradient'

                )))
                ->add('email','email', array(
                    'required' => true,
                    'attr' => array(
                        'placeholder' => 'Email',
                        'class' => 'text gradient'
                )))
                ->add('subject', null, array(
                    'required' => true,
                    'attr' => array(
                        'placeholder' => 'Subject',
                        'class' => 'text gradient'
                )))
                ->add('body', 'textarea', array(
                    'required' => true,
                    'attr' => array(
                        'placeholder' => 'Message',
                        'class' => 'text gradient'
            )));
    }

答案 1 :(得分:0)

必需的默认值在类方法configureOptions()

中定义
public function configureOptions(OptionsResolver $resolver)
{
    $resolver->setDefaults(array(
        'required' => true,
    ));
}

以及此类型的所有父母(父母由getParent()方法定义)
第一个父级是Symfony\Component\Form\Extension\Core\Type\FormType,并且必需的默认值被定义为true,这是奇怪的,不需要第一次输入。

您可以在添加新元素$form->add('subject', TextType::class, array('required' => false));

时定义所需内容