首页 > 解决方案 > Symfony - 可捕获的致命错误:类 App\Entity\Question 的对象无法转换为字符串

问题描述

我正在学习 Symfony,我遇到了这个问题。

可捕获的致命错误:类 App\Entity\Question 的对象无法转换为字符串

我的目标是通过表单添加到数据库中。

我想我的 EntityType 使用错了,这是我的表格:

public function buildForm(FormBuilderInterface $builder, array $options)
        {
            $builder
                ->add('question', EntityType::class,
                    [
                        'class' => Question::class
                    ]
                )
                ->add(
                    'answer',
                    TextType::class
                )
                ->add(
                    'valid',
                    ChoiceType::class,
                    [
                        'choices' => [
                            'true' => 1,
                            'false' => 0
                        ]
                    ]
                )
                ->add(
                    'save',
                    SubmitType::class
                )
            ;
        }

这是我构建表单的控制器:

 $entityManager = $this->getDoctrine()->getManager();

$answer = new Answer();

        $form = $this->createForm(ExamDatabaseInteractionType::class, $answer);
        $form->handleRequest($request);

        if ($form->isSubmitted()) {
            $entityManager->persist($answer);
            $entityManager->flush();

        }


        return [
            'form' => $form->createView()
        ];

我猜数据库结构在这里也很重要:

describe question;
+----------+--------------+------+-----+---------+----------------+
| Field    | Type         | Null | Key | Default | Extra          |
+----------+--------------+------+-----+---------+----------------+
| id       | int(11)      | NO   | PRI | NULL    | auto_increment |
| question | varchar(255) | NO   |     | NULL    |                |
+----------+--------------+------+-----+---------+----------------+
2 rows in set (0.01 sec)

describe answer;
+-------------+--------------+------+-----+---------+----------------+
| Field       | Type         | Null | Key | Default | Extra          |
+-------------+--------------+------+-----+---------+----------------+
| id          | int(11)      | NO   | PRI | NULL    | auto_increment |
| question_id | int(11)      | YES  | MUL | NULL    |                |
| answer      | varchar(255) | NO   |     | NULL    |                |
| valid       | tinyint(1)   | NO   |     | NULL    |                |
+-------------+--------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)


我希望我的问题结构很好,这是我关于堆栈溢出的第一个问题。

感谢您的帮助。

标签: phpformssymfony

解决方案


我很佩服 Symfony 如何将所有内容都记录在案,您的案例也不例外。请参阅Entity Type的文档。

它有一个字段选项choice_label

这是应该用于在 HTML 元素中将实体显示为文本的属性。

如果留空,实体对象将被转换为字符串,因此必须有一个__toString()方法。您还可以传递回调函数以进行更多控制。

因此,您没有指定choice_label,也没有__toString实施,因此出现错误。

你应该做什么:

$builder
    ->add('question', EntityType::class,
    [
        'class' => Question::class,
        'choice_label' => 'questionName',
    ])

__toString()Entity\Question.


推荐阅读