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:
$databaseFields = ['username', 'email', 'lastname', 'firstname'];
> tableau des headers, depuis le CSV:
$headersCsvArray = ['email', 'username', 'lastName'];
Sur base de ces 2 tableaux, je souhaite construire un formulaire, donc:
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:
1 2 3 4
| class ImportUserFormModel
{
public $extraFields;
} |
Le resultat que je souhaite, lorsque je fais
$form->getData("extraFields")
serait quelque chose comme ceci:
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'.
Partager