我想构建一个简单的表单,允许用户向数据库添加文本,但是出现以下错误:
该表单的视图数据应该是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 %}
我不确定自己在做什么错,因为我没有任何语法错误。有人可以解释我在做什么错吗?
答案 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
]);
}
}