Ich verwende die Methode here implementiert, um mehrere Datei-Upload zu implementieren, aber es kann keinen Weg finden, um es funktionieren zu lassen. Ich weiß, dass es schon viele Fragen darüber gibt, aber ich konnte keine passende Antwort für meinen Fall finden.Symfony2 nicht gemappte collectionType funktioniert nicht
Beachten Sie, dass ich den Inhalt der Datei in der Datenbank speichern, dank einer Datei Entity mit Name, Inhalt und Typ Attribute. Um es jedoch funktionieren zu lassen, kartiere ich das Formular nicht auf diese Entität.
Also, mein Controller sieht wie folgt aus:
$files = [];
$form = $this->createForm(MultipleFilesType::class, []);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$files = $form->getData();
dump($files);
foreach ($files as $file)
{
//code that stores the file in the database which works fine and is not relevant to my problems I think
}
return // redirect to some page
}
return //form to the view
Meine MultipleFilesType ist die Sammlung, die mehrere addFileType einbetten:
class MultipleFilesType extends AbstractType
{
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('files', CollectionType::class, array (
'entry_type' => addFileType::class,
'allow_add' => true,
'allow_delete' => true,
'label' => false,
'mapped' => false,
'data' => array(
array ('file' => null)
)
))
;
}
}
und meine addFileType ist dies:
class AddFileType extends AbstractType
{
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('file', FileType::class, array (
'label' => false
))
;
}
}
In Meine Ansicht Ich kann Felder hinzufügen/entfernen dank einiger JQuery in der verknüpften Dokumentation erklärt. (Der Code ist mehr oder weniger der gleiche wie der im Dokument, außer dass ich nicht mit Entitys arbeite, also zeige ich es hier nicht).
Ich versuchte zuerst, einzelne Dateiuploads zu machen, was gut funktionierte, und dann habe ich den obigen Code ausprobiert, mit dem collectionType und einem $ files -Array die Daten vom Formular an den Controller abzurufen, aber ich habe diese Probleme :
Wenn ich das Formular abschicke, sind anscheinend die Werte der Dateien nach dem ersten nicht gültig.
Wenn ich nur eine Datei übergebe (kein Validierungsfehler), zeigt der Dump ($ files) im Controller mir ein leeres Array an, egal was passiert.
Jede Hilfe würde geschätzt werden =) Zögern Sie nicht, nach mehr Code zu fragen, wenn Sie denken, dass es benötigt wird.
Vielen Dank!
Vorerst meine Eingabedateien haben den Namen "multiple_files [Dateien] [INDEX]". Ist das mein $ files array in meinem Controller leer? Sollte ich nur diesen Namen mit etwas Javascript ändern, um die "_form" hinzuzufügen, die fehlt? Auch ich merke, dass mein AddFileType in seinem aktuellen Zustand nutzlos ist, aber ich verstehe nicht wirklich, wie es stattdessen verwendet oder FileType würde zu Fehlern führen:/ – abernard
Ja kann es definitiv der Grund sein, dass $ Daten leer ist, könnte es einen anderen geben Grund, aber das scheint ein guter zu sein. AddFileType kann zu Fehlern führen, da Sie eine Schachtelungsebene in dem erwarteten Datenarray hinzufügen. Mit AddFileType müssten Eingaben mit "multiple_files_form [files] [INDEX] [file]" – Terenoth
gesendet werden. Also habe ich diese Änderung vorgenommen. Wenn meine Namen "multiple_files_form [files] [INDEX]" sind, funktioniert das auch nicht. Der Controller geht nicht mehr in die Bedingung 'if ($ form-> isSubmitted() && $ form-> isValid()) ', wenn ich das Formular absende. – abernard