我在控制器中创建了一个这样的表单:
$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] 删除。
我来说两句