表单的视图数据应该是App \ Entity \ SubmitNew

时间:2019-03-23 10:39:53

标签: php database forms symfony

我想构建一个简单的表单,允许用户向数据库添加文本,但是出现以下错误:

  

该表单的视图数据应该是App \ Entity \ SubmitNew类的实例,但是是一个(n)字符串。您可以通过将“ data_class”选项设置为null或添加一个将a(n)字符串转换为App \ Entity \ SubmitNew实例的视图转换器来避免此错误。

Controller.php

    public function index()
    {
        $form = $this->createForm(SubmitNewType::class, SubmitType::class);

        return $this->render('submit_new/index.html.twig', [
            'form' => $form->createView()
        ]);
    }

SubmitNewType.php

class SubmitNewType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('question')
            ->add('answer')
        ;
    }

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

html.twig

{% extends 'base.html.twig' %}

{% block title %}Hello {% endblock %}

{% block body %}
    {{ form(form) }}
{% endblock %}

我不确定自己在做什么错,因为我没有任何语法错误。有人可以解释我在做什么错吗?

1 个答案:

答案 0 :(得分:1)

{
    $form = $this->createForm(SubmitNewType::class, SubmitNew::class); //You had SubmitType, when you have to pass the class that you defined in your SubmitNewType

    return $this->render('submit_new/index.html.twig', [
        'form' => $form->createView()
    ]);
}

您正在传递SubmitType而不是SubmitNewType中定义的SubmitNew

{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('question')
            ->add('answer')
        ;
    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults([
            'data_class' => SubmitNew::class, //You defined SubmitNew here, so, you have to pass this class in createForm
        ]);
    }
}