Symfony 2.8 - FormBuilder:为什么当我定义它的类型时字段变成必需的?

Symfony 2.8 - FormBuilder : why field becomes required when I define its type?

我正在构建一个包含两个非强制性文件的表格:

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

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

谢谢:)

问题一定是与此表单相关的实体。 name 和 subject 可以为空吗?如果没有配置 ORM,那么您需要为每个表单字段手动设置 required 属性。查看没有 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'
            )));
    }

所需的默认值在类型 class 方法中定义 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));