Forms 无法确定属性“的访问类型”;id";-HandlerRequest失败,除非我将实体id公开

Forms 无法确定属性“的访问类型”;id";-HandlerRequest失败,除非我将实体id公开,forms,symfony,oop,request,doctrine,Forms,Symfony,Oop,Request,Doctrine,我从一个问题实体设置了一个表单生成器: class Question { /** * @ORM\Id * @ORM\Column(type="integer") * @ORM\GeneratedValue(strategy="AUTO") */ protected $id; /** * @ORM\Column(type="string", length=255, name="question") * @var s

我从一个问题实体设置了一个表单生成器:

class Question
{
    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;
    /**
     * @ORM\Column(type="string", length=255, name="question")
     * @var string $question
     */
    protected $question;
    /**
     * @ORM\Column(type="string", length=255, name="answer1")
     * @var string $answer1
     */
    protected $answer1;
    /**
     * @ORM\Column(type="string", length=255, name="answer2")
     * @var string $answer2
     */
    protected $answer2;
    /**
     * @ORM\Column(type="string", length=255, name="answer3")
     * @var string $answer3
     */
    protected $answer3;
    /**
     * @ORM\Column(type="integer", name="correct_answer")
     * @var int $correctAnswer
     */
    protected $correctAnswer;
    /**
     * @ORM\Column(type="datetime", name="post_date")
     */
    protected $postDate;
    /....
现在,构建器如下所示:

 $question = new Question();

        $form = $this->createFormBuilder($question)
            ->add('id', HiddenType::class, array(
                    'data' => 0, 
                    'attr' => array(
                        'class' => 'question-form__id'
                    )
                )
            )
            ->add('question', TextType::class, array('label' => 'Pytanie', 'required' => true))
            ->add('answer1', TextType::class, array('label' => 'Odpowiedź 1', 'required' => true))
            ->add('answer2', TextType::class, array('label' => 'Odpowiedź 2', 'required' => true))
            ->add('answer3', TextType::class, array('label' => 'Odpowiedź 3', 'required' => true))
            ->add('correctAnswer', ChoiceType::class, array(
                'label' => 'Poprawna odpowieź',
                'choices' => array(
                    'Pierwsza' => 1,
                    'Druga' => 2,
                    'Trzecia' => 3
                )
            ))
            ->add('save', SubmitType::class, array(
                'label' => 'Dodaj Pytanie',
                'attr' => array(
                    'class' => 'btn btn-primary btn--add-question'
                )
            ))
            ->getForm();
id将数据设置为0的原因是,它的值将形成新问题(
如果id==0
),或编辑当前问题(
否则

问题是,在提交我收到的表格时

无法确定属性“id”的访问类型

exit
显示了发生在
$form->handleRequest($request)的错误

有趣的是,如果我将实体
id
设置为public,HandlerRequest就可以正常工作

虽然我们都知道把身份证公开并不是一个好主意

因此,我的问题是,如何避免错误,而不必进行可能是有史以来最糟糕的实践


编辑:
id
值设置为private会导致相同的错误

您可以为$id添加一个setter,就像其他属性的任何setter一样

我通过在类实体中添加一个全局参数,然后定义setter,解决了类似的问题。在发生错误之前已添加getter方法。