【问题标题】:Symfony3 create form without entity in type fileSymfony3在类型文件中创建没有实体的表单
【发布时间】:2017-03-28 14:10:30
【问题描述】:

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

$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 ();

我正在尝试将我的表单创建放入一个类型文件中。我这样做了,但没有创建表单,我无法在视图中显示表单字段。我不明白为什么。

#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".

【问题讨论】:

  • $data = ['Field1' => null, 'Field2' => null];并确保您处于开发模式,以便您看到错误消息。当然,还要确保 $form 被传递给你的 twig 模板,并且模板可以正常工作。
  • 我收到的错误消息是:属性“Field1”和方法“Field1()”、“getField1()”/“isField1()”或“__call()”都不存在并在“Symfony\Component\Form\FormView”类中拥有公共访问权限
  • 因此 $data = ... 建议。
  • 试试这个 symfony.com/doc/current/forms.html#building-the-form symfony.com/doc/current/form/without_class.html 也检查这个方法 -- 'form' => $form->createView(),

标签: php symfony symfony-forms


【解决方案1】:

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

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 传递,而不是一个简单的数组。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-09
    • 1970-01-01
    相关资源
    最近更新 更多