为了账号安全,请及时绑定邮箱和手机立即绑定

Symfony 4 - 使用数组创建表单

Symfony 4 - 使用数组创建表单

PHP
潇潇雨雨 2023-03-11 16:41:36
我正在寻找一种使用 Symfony 4 创建嵌入式表单的方法。我使用了一个查询,这个查询返回一个数组。但是当我执行代码时出现以下错误:表单的视图数据应该是类 App\Entity\Categorie 的一个实例,但它是一个 (n) 数组。您可以通过将“data_class”选项设置为 null 或添加一个将 (n) 数组转换为 App\Entity\Categorie 实例的视图转换器来避免此错误。所以我的控制器看起来像这样:    /**     * @Route("/admin/categories/import/{userId}", name="admin.categorie.link", methods={"GET|POST"})     * @param Int $userId     * @return Response     */    public function linkImport(Int $userId, Request $request)    {        $categories = $this->em->getRepository(Categorie::class)->checkIfNew($userId);            $form = $this->createForm(CategorieType::class, $categories);            $form->handleRequest($request);            if ($form->isSubmitted() && $form->isValid()) {                $this->em->flush();                $this->addFlash('success', 'Catalogue modifié avec succès');                return $this->redirectToRoute('admin.catalogues.index');            }            return $this->render('admin/catalogues/link.html.twig', [                'categories' => $categories,                'form' => $form->createView()            ]);    }我的表单类型如下所示:class CategorieType extends AbstractType{    public function buildForm(FormBuilderInterface $builder, array $options)    {        $builder            ->add('categorie_intitule')            ->add('categorie_parent_id')        ;    }    public function configureOptions(OptionsResolver $resolver)    {        $resolver->setDefaults([            'data_class' => Categorie::class,        ]);    }}我尝试使用 foreach 来构建表单foreach ($categories as $categorie) {    $form = $this->createForm(CategorieType::class, $categorie);    $form->handleRequest($request);}但它在我的树枝里返回了我的notinhg。所以你能告诉我更多关于这个错误的信息,以及如何解决它吗?谢谢。
查看完整描述

1 回答

?
米琪卡哇伊

TA贡献1998条经验 获得超6个赞

CategorieType是单个 的单一形式Category。如果你需要显示所有这些,也许你应该用另一种形式包裹CategorieType 起来CategorieCollectionType(比如)。


更多或更少,像


use Symfony\Component\Form\Extension\Core\Type\CollectionType;


class CategorieCollectionType extends AbstractType

{

    public function buildForm(FormBuilderInterface $builder, array $options)

    {

        $builder

            ->add('categories', CollectionType::class, [

                'entry_type' => CategorieType::class, // remember to import it via "use"

            ])

        );

    }

}

并在控制器中使用它


$form = $this->createForm(CategorieCollectionType::class, ['categories' => $categories]);



查看完整回答
反对 回复 2023-03-11
  • 1 回答
  • 0 关注
  • 82 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信