Symfony3 在类型文件中创建没有实体的表单
Symfony3 create form without entity in type file
我在我的控制器中创建了一个表单,如下所示:
$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 ();
我正在尝试将我创建的表单放入类型文件中。我是这样做的,但是没有创建表单,我无法在 view.I 中显示表单字段,不明白为什么。
#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,
));
}
但现在我的错误是:
The options "Field1", "Field2" do not exist. Defined options are: "action",
"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", "data_class", "disabled",
"empty_data", "error_bubbling", "error_mapping", "extra_fields_message",
"inherit_data", "invalid_message", "invalid_message_parameters", "label",
"label_attr", "label_format", "mapped", "method", "post_max_size_message",
"property_path", "required", "translation_domain", "trim",
"upload_max_size_message", "validation_groups".
您创建表单的控制器代码似乎有误。
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
。
在这种情况下,只需将 configureOptions
留空即可。
如果你想使用实体,你应该将它的实例作为 $data
而不是简单的数组传递。
我在我的控制器中创建了一个表单,如下所示:
$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 ();
我正在尝试将我创建的表单放入类型文件中。我是这样做的,但是没有创建表单,我无法在 view.I 中显示表单字段,不明白为什么。
#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,
));
}
但现在我的错误是:
The options "Field1", "Field2" do not exist. Defined options are: "action",
"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", "data_class", "disabled",
"empty_data", "error_bubbling", "error_mapping", "extra_fields_message",
"inherit_data", "invalid_message", "invalid_message_parameters", "label",
"label_attr", "label_format", "mapped", "method", "post_max_size_message",
"property_path", "required", "translation_domain", "trim",
"upload_max_size_message", "validation_groups".
您创建表单的控制器代码似乎有误。
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
。
在这种情况下,只需将 configureOptions
留空即可。
如果你想使用实体,你应该将它的实例作为 $data
而不是简单的数组传递。