首页 > 解决方案 > Symfony 4 中 CollectionType 表单的问题

问题描述

Symfony 4 中的 Collectiontype 有问题。我尝试在数据库的许多表中保存一些信息。我的保存级联是: 1 releve 包含 1 carriere 包含很多 infoCarriere 包含很多点 为了保存此信息,我使用带有 collectionType 的特定表单: My CarriereRelaiType:

public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add("caisses", CollectionType::class, [
                'entry_type' => CarriereType::class,
                'allow_add' => true,
                'allow_delete' => true,
                'attr' => ['class' => 'col-sm-2']
            ]);

    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults([
            'data_class' => null,
            'empty_data' => null
        ]);
    }

我的信息CarriereRelaiType:

public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add("infoCarrieres", CollectionType::class, [
                'entry_type' => InfoCarriere::class,
                'allow_add' => true,
                'allow_delete' => true,
                'attr' => ['class' => 'col-sm-2']
            ]);

    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults([
            'data_class' => null,
            'empty_data' => null
        ]);

    }

我的积分也是一样的。显示我的控制器的一部分:

// creation carriere
$recupCaisse = [];
        foreach ($dispatch as $keyDispatch => $valueDispatch){
            if ($keyDispatch != "dateDoc"){
                $recupCaisse[][$keyDispatch] = $valueDispatch;
            }
        }
        
        $compteurCaisse = count($recupCaisse);
        for ($i=0; $i<$compteurCaisse; $i++){
            // creation de Carriere
            $dataCarriere["caisses"][$i] = new Carriere();
            foreach ($recupCaisse[$i] as $keyCaisse => $valueCaisse){
                // recuperation des noms de caisse
                $caisse = $caisseRepository->findByAcronyme(strtoupper($keyCaisse));
            }
            $dataCarriere["caisses"][$i]->setCaisse($caisse[0]);
            // recuperation des numeros 
            foreach ($valueCaisse as $keyDetail => $valueDetail) {
                if ($keyDetail == "numero") {
                    $dataCarriere["caisses"][$i]->setNumero($valueDetail);
                }
            }
        }
       dump($dataCarriere);
        $formCarriere = $this->createForm(CarriereRelaiType::class, $dataCarriere);
        $formCarriere→handleRequest($request);


for ($i=0; $i<$compteurCaisse; $i++){
            foreach ($recupCaisse[$i] as $keyDetail => $valueDetail){
                // ajout infocarriere
                foreach ($valueDetail as $keyTempInfoCarriere => $valueTempoInfoCarriere){
                    $dataInfoCarriere[$keyDetail][$keyTempInfoCarriere] = new InfoCarriere();
                    if (is_array($valueTempoInfoCarriere)){
                        foreach ($valueTempoInfoCarriere as $key => $value){
                            if ($key != "numeroDossier"){
                                if ($key == 'annee'){
                                    $dataInfoCarriere[$keyDetail][$keyTempInfoCarriere]->setAnnee($value);
                                }elseif ($key == 'debut'){
                                    $dataInfoCarriere[$keyDetail][$keyTempInfoCarriere]->setDebut($value);
                                }elseif ($key == 'fin'){
                                    $dataInfoCarriere[$keyDetail][$keyTempInfoCarriere]->setFin($value);
                                }elseif ($key == 'naturePeriode'){
                                    $dataInfoCarriere[$keyDetail][$keyTempInfoCarriere]->setStatus($value);
                                }

                            }
                        }
                    }
                    }
            }
        }
dump($dataInfoCarriere);
$formInfoCarriere = $this->createForm(InfoCarriereRelaiType::class, $dataInfoCarriere);
$formInfoCarriere->handleRequest($request);
        

用树枝在我的表格上显示并保存 Carriere 是可以的。我想用所有信息显示我的所有表单,但我有这个错误消息:

Could not load type "App\Entity\InfoCarriere": class does not implement "Symfony\Component\Form\FormTypeInterface".

在我的转储($dataCarriere 和 $dataInfoCarriere)上,我具有相同的结构,但是在 $dataCarriere 中我只有 1 个条目:

array:1 [▼
  "caisses" => array:4 [▼
    0 => App\Entity\Carriere {#1154 ▶}
    1 => App\Entity\Carriere {#1801 ▶}
    2 => App\Entity\Carriere {#1860 ▶}
    3 => App\Entity\Carriere {#1891 ▶}
  ]
]

在 $dataInfoCarriere 我有 4 个条目:

array:4 [▼
  "truc" => array:35 [▶]
  "bidule" => array:14 [▶]
  "machin" => array:8 [▶]
  "chose" => array:23 [▶]
]

(1个条目的一部分)

array:4 [▼
  "truc" => array:35 [▼
    11 => App\Entity\InfoCarriere {#1943 ▶}
    12 => App\Entity\InfoCarriere {#2090 ▶}
    13 => App\Entity\InfoCarriere {#2105 ▶}
    14 => App\Entity\InfoCarriere {#2107 ▶}
    15 => App\Entity\InfoCarriere {#2326 ▶}
    16 => App\Entity\InfoCarriere {#2398 ▶}
    17 => App\Entity\InfoCarriere {#2401 ▶}
    18 => App\Entity\InfoCarriere {#2403 ▶}

我试图只用一个更改我的 $dataInfoCarriere 条目,但出现相同的错误消息。我想我忘记了什么,但我不知道是什么。预先感谢您的帮助

标签: phparraysformssymfony4

解决方案


推荐阅读