Symfony - Catchable Fatal Error: Объект класса App \ Entity \ Question не может быть преобразован в строку - PullRequest
0 голосов
/ 13 апреля 2019

Я изучаю 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)


Надеюсь, я хорошо структурировал свой вопрос, это мой первый вопрос о переполнении стека.

Спасибо за вашу помощь.

1 Ответ

0 голосов
/ 13 апреля 2019

Я восхищаюсь, как у Symfony все очень хорошо задокументировано, и ваш случай не исключение. См. Документы для Тип сущности .

Имеется опция поля choice_label:

Это свойство, которое следует использовать для отображения сущностей в виде текста в элементе HTML.

Если оставить пустым, объект-сущность будет приведен к строке и поэтому должен иметь метод __toString(). Вы также можете передать функцию обратного вызова для большего контроля.

Таким образом, вы не указываете choice_label, и вы не внедрили __toString, следовательно, ошибка.

Что вы должны сделать:

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

ИЛИ навесное оборудование __toString() in Entity\Question.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...