Symfony 4 - 使用数组创建表单

我正在寻找一种使用 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。所以你能告诉我更多关于这个错误的信息,以及如何解决它吗?谢谢。


潇潇雨雨
浏览 100回答 1
1回答

米琪卡哇伊

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]);
打开App,查看更多内容
随时随地看视频慕课网APP