【问题标题】:Symfony Crud FormSymfony Crud 形式
【发布时间】:2022-08-04 15:58:53
【问题描述】:

我创建了一个管理事件的 CRUD,另一个管理音乐风格的 CRUD。

我在两者之间建立了多对多关系,我想从我的活动创作中选择我的音乐风格。

因此,我为用于创作和编辑的事件制作了一个表单类型。

在处理我的关系时,这种杂物对我很有效。事件的创建仍然有效,但是当我想访问我的事件修改表单的视图时出现此错误:

Unable to transform value for property path \"music_type\": Expected a Doctrine\\Common\\Collections\\Collection object.

你怎么看 ?

我的事件类型的部分音乐风格:

            ->add(\'music_type\', EntityType::class, [
                \'class\' => MusicStyle::class,
                \'query_builder\' => function (MusicStyleRepository $r) {
                    return $r->createQueryBuilder(\'i\')
                        ->orderBy(\'i.name\', \'ASC\');
                },
                \'label\' => \'Style de musique\',
                \'label_attr\' => [
                    \'class\' => \'form-label mt-4\'
                ],
                \'choice_label\' => \'name\',
                \'multiple\' => true,
                \'expanded\' => true,
            ])

我的实体事件:

     * @return Collection<int, MusicStyle>
     */
    public function getMusicStyles(): Collection
    {
        return $this->musicStyles;
    }

    public function addMusicStyle(MusicStyle $musicStyle): self
    {
        if (!$this->musicStyles->contains($musicStyle)) {
            $this->musicStyles[] = $musicStyle;
            $musicStyle->addEvent($this);
        }

        return $this;
    }

    public function removeMusicStyle(MusicStyle $musicStyle): self
    {
        if ($this->musicStyles->removeElement($musicStyle)) {
            $musicStyle->removeEvent($this);
        }

        return $this;
    }

我的事件控制器


    public function edit(
        EventRepository $repository, 
        Event $event, 
        Request $request, 
        EntityManagerInterface $manager
    ): Response {
        $form = $this->createForm(EventType::class, $event);
        $form->handleRequest($request);
        if($form->isSubmitted() && $form->isValid()) {
            $event = $form->getData();

            $manager->persist($event);
            $manager->flush();

            $this->addFlash(
                \'success\',
                \'Ton event a bien été modifié !\'
            );
            
            return $this->redirectToRoute(\'event.index\');
        }
        return $this->render(\'pages/event/edit.html.twig\', [
            \'form\' => $form->createView()
        ]);    
    }

这似乎是一个愚蠢的问题,所以我是 symfony 的新手

  • 难道你在使用-&gt;add(\'music_type\', ...) 而应该是-&gt;add(\'musicStyles\', ...)
  • 不,我数据库中的冠军是个好名字
  • 但该属性似乎是 $musicStyles
  • 这是因为 Doctrine 的 getResult() 方法(在 \'query_builder\' 选项中使用)总是返回一个数组,而不是 Collection 对象。更多详情here

标签: forms symfony crud


【解决方案1】:

请尝试将属性类型从 Collection 更改为 ArrayCollection。因为查询构建器返回一个数组,而不是一个集合。

要检查的另一件事是,如果您在实体构造函数中初始化属性,例如

public function __construct()
{
    $this->musicStyles = new ArrayCollection();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多