Symfony3创建类型文件中没有实体的表单

艾蒂安

我在控制器中创建了一个这样的表单:

$data = array ();
$formBuilder = $this->createFormBuilder ( $data );
$formBuilder->add( 'Field1', NumberType::class, array(
                    'constraints' => array(
                            new NotBlank(),
                    ),
            ) )
            ->add ( 'Field2', NumberType::class, array(
                    'constraints' => array(
                            new NotBlank(),
                    )
...);
$form = $formBuilder->getForm ();

我试图将创建的表单放入Type文件中。我是这样做的,但是没有创建表单,并且无法在视图中显示表单字段。我不明白为什么。

#in ControlController
$data = array ();
$formBuilder= $this->createFormBuilder(ControlType::class, $data);
$form = $formBuilder->getForm ();

#in ControlType
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add( 'Field1', NumberType::class, array(
                    'constraints' => array(
                            new NotBlank(),
                    ),
            ) )
            ->add ( 'Field2', NumberType::class, array(
                    'constraints' => array(
                            new NotBlank(),
                    )....;
}

编辑1:我已经尝试了所有您告诉我的事情,但是仍然无法正常工作。我的代码现在看起来像这样:

#in ControlController
$data = ['Field1' => null, 'Field2' => null];
$formBuilder= $this->createFormBuilder(ControlType::class, $data);
$form = $formBuilder->getForm ();
return $this->render ( 'MeTestBundle:Control:index.html.twig', array (
            'form' => $form->createView () 
    ) );

#in ControlType
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add( 'Field1', NumberType::class, array(
                            'mapped' => false,
    ) )
    ->add ( 'Field2', NumberType::class, array(
            'constraints' => array(
                    new NotBlank(),
            ),
            'mapped' => false
    ))
    ->add ( 'save', SubmitType::class, array (
            'label' => 'Control'
    ));
}

public function configureOptions(OptionsResolver $resolver)
{
    $resolver->setDefaults(array(
            'data_class' => Control::class,
    ));
}

但是现在我遇到的错误是选项“ Field1”,“ Field2”不存在。定义的选项为:“操作”,“ allow_extra_fields”,“ attr”,“ auto_initialize”,“ block_name”,“ by_reference”,“ compound”,“ constraints”,“ csrf_field_name”,“ csrf_message”,“ csrf_protection”,“ csrf_token_id ”,“ csrf_token_manager”,“数据”,“ data_class”,“已禁用”,“ empty_data”,“ error_bubbling”,“ error_mapping”,“ extra_fields_message”,“ inherit_data”,“ invalid_message”,“ invalid_message_parameters”,“ “ label_attr”,“ label_format”,“映射”,“方法”,“

您用于创建表格的控制器代码似乎是错误的。

Controller中createFormBuilder的签名定义如下:

public function createFormBuilder($data = null, array $options = array())

您想要的应该是:

$data = ['Field1' => null, 'Field2' => null];
$form = $this->createForm(ControlType::class, $data);
return $this->render ( 'MeTestBundle:Control:index.html.twig', array (
        'form' => $form->createView () 
));

编辑:data_class如果您不使用数据对象,也不应设置a configureOptions在这种情况下,留空。如果要使用实体,则应传​​递它的实例$data而不是简单的数组。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章