Bonjour a toutes et tous,

J'ai souci concernant mon project Symfony 5.

Je tente de realiser une fonctionnalite d'import de donnees via CSV vers ma base de donnees.
Le client doit pouvoir choisir quelle donnes (provenant du CSV) corresspond a quelle donnee de la DB.

Exemple: je souhaite importer des users.

> tableau des champs, depuis la base de donnees:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
$databaseFields = ['username', 'email', 'lastname', 'firstname'];
> tableau des headers, depuis le CSV:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
$headersCsvArray = ['email', 'username', 'lastName'];

Sur base de ces 2 tableaux, je souhaite construire un formulaire, donc:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
foreach ($databaseFields as $databaseField) {
    $builder->add('extraFields', ChoiceType::class,
        [
            'label'       => $databaseField,
            'placeholder' => 'Choose a column from the excel file',
            'choices'     => $headersCsvArray,
            'multiple'    => false,
            'expanded'    => false,
            'required'    => false
        ]
    );
}
Petite explication ici: j'ai besoin d'un input pour chaque propriete de l'entite User, avec un select dropdown qui contient les headers venant du CSV.
Le but est que le client puisse faire un match des donnees entre le CSV et la base de donnees.

Ce formulaire est lie a un FormMode, qui ne contient pas grand chose pour le moment:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
class ImportUserFormModel
{
    public $extraFields;
}
Le resultat que je souhaite, lorsque je fais
Code : Sélectionner tout - Visualiser dans une fenêtre à part
$form->getData("extraFields")
serait quelque chose comme ceci:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
$importDatas = [
    'username' => 
    [
        'username' => true,
        'emails'   => false,
        'lastName' => false
    ], 
    'email' => 
    [
        'username' => false,
        'emails'   => true,
        'lastName' => false
    ], 
    'lastname' => 
    [
        'username' => false,
        'emails'   => false,
        'lastName' => true
    ],
    'firstname' => 
    [
        'username' => false,
        'emails'   => false,
        'lastName' => true
    ],
];

Le soucis, bien evidement, ce que dans mon foreach, a chaque iteration j'ajoute le meme nom de champs, a savoir 'extraFields'.