Bonjour ,
J’ai un soucis avec mon code. Pour expliquer le contexte :
Je fais de la récupération d’information via un OCR.
Ces informations se retrouve dans un tableau (de type annee, debut, fin, status, points, type de points)
Toutes ces informations doivent être sauvegarder en BDD, mais sur des tables différentes :
Vu qu’il est possible de tout modifier de façon indépendante par la suite, je crée un formulaire relais pour mettre en place mes CollectionType (et donc, tous les morceaux de mon formulaire final)
Voici mon 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
]);
}
Voici mon InfoCarriereRelaiType :
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
]);
}
et j’ai la même chose pour les points.
Voici mon une partie de mon controller :
(pour info, $dispatch est le tableau mappé issu de mon OCR)
//creation de mon releve
$formReleve = $this->createForm(ReleveRelaiType::class, $dispatch, [
'etudie' => $etudie,
]);
$formReleve→handleRequest($request);
// 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);
Tout se passe bien en sauvegarde jusqu’à la carrière (j’ai 2 niveaux au dessus).
je voudrai pouvoir afficher l’ensemble de mon tableau afin de modifier/valider les informations
Comme dit précédemment, tout se passe bien jusqu’à la carriere (affichage / sauvegarde). Lorsque je veux continuer avec mes infoCarriere, voici le message d’erreur Symfony :
Could not load type "App\Entity\InfoCarriere": class does not implement "Symfony\Component\Form\FormTypeInterface".
Dans mes dumps $dataCarriere et $dataInfoCarriere j'obtiens sensiblement la meme chose... sauf que la Carriere n'a qu'une seule entree et l'InfoCarriere en possède 4... mais ensuite, on a bien a chaque fois un objet
Dump $dataCarriere:
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 ▶}
]
]
Dump $dataInfoCarriere:
array:4 [▼
"truc" => array:35 [▶]
"bidule" => array:14 [▶]
"machin" => array:8 [▶]
"chose" => array:23 [▶]
]
et en voici une partie deplié:
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 ▶}
J’ai l’impression qu’il me manque pas grand-chose mais je sais pas quoi… merci par avance de votre aide ;) et de m'avoir lu
bonne journée
Probleme résolu, dans mon InfoCarriereRelaiType, je faisais appel a l'entity et non au formType.
Il faut remplacer
'entry_type' => InfoCarriere::class,
par
'entry_type' => InfoCarriereType::class,
Merci en tout cas de m'avoir lu et bonne journée