Symfony2: Aktualisieren Sie ein Formularfeld nicht, wenn es nicht bereitgestellt wird

8

Ich habe ein Formular für meine "Team" -Entität. Diese Entität hat ein "Bild" -Feld. Dieses Feld wird beim Erstellungsprozess benötigt, ist aber beim Bearbeitungsprozess nicht erforderlich. Aber gerade jetzt, während des Bearbeitungsprozesses, wenn ich kein Bild in der Dateieingabe zur Verfügung stelle, bleibt die leere Eingabe bestehen und so wird mein Datenbankfeld während des Prozesses geleert. Wie kann ich die Persistenz dieses Feldes vermeiden, wenn in der Formulardateieingabe nichts angegeben ist? Die Entität behält also ihren alten Wert für dieses Feld bei. Wenn eine Datei bereitgestellt wird, möchte ich natürlich, dass die alte gelöscht wird.

Mein Controller sieht so aus:

%Vor%

und Teil meiner Entität, die sich mit dem Image befasst (ich bin mir ziemlich sicher, dass ich hier etwas tun muss, aber ich weiß nicht genau was):

%Vor%

BEARBEITEN

Ok, ich habe einige Änderungen am Code dieser Antwort vorgenommen, weil der Event-Listener anscheinend nach einer FormEvent-Instanz fragt in seiner Rückruffunktion keine FormInterface-Instanz.

%Vor%

});

Wenn ich ein Bild zur Verfügung stelle, geht das Skript wie erwartet in den Test und stirbt (). Wenn ich keine Datei zur Verfügung stelle, geht das Skript nicht in den Test if (), aber mein Feld in der Datenbank wird immer noch mit einem leeren Wert gelöscht. Irgendeine Idee?

Und wie folgt, hier ist das Formular

%Vor%

und die gesamte Team Entity:

%Vor%

BEARBEITEN 2

Ich habe das getan. Wenn ich ein Bild zur Verfügung stelle, wird es im Bildfeld in der Datenbank gespeichert und die Umleitung zu meiner Indexseite erfolgt. Wenn ich kein Bild zur Verfügung stelle, findet keine Umleitung statt und die folgende Nachricht erscheint oberhalb meiner Dateieingabe in meinem Formular: "Die Datei konnte nicht gefunden werden." In meiner Klasse TeamEditType habe ich Folgendes getan, also sollte das Bild nicht benötigt werden.

%Vor%     
VaN 21.03.2014, 11:18
quelle

3 Antworten

10

Ab Symfony 2.3 können Sie einfach die HTTP-Methode PATCH verwenden, wie in hier .

%Vor%

Dies ist eine einfache Möglichkeit, eine Entität teilweise zu aktualisieren, indem Sie Ihr Hauptformular verwenden, ohne alle Felder zu rendern.

    
Roubi 30.01.2016 21:27
quelle
6

Ein Ansatz in Symfony 2.4 (weitere Informationen in Symfony2 coockbook ):

%Vor%

Bearbeiten

Es scheint, dass Sie Ihre Prepsit-Daten bereits testen. Versuchen Sie Folgendes:

%Vor%     
Debflav 21.03.2014 12:14
quelle
0

Ich benutze symfony 3.3 und habe das gleiche Problem, unten ist die Lösung, wie ich es überwinde.

Sie müssen eine zusätzliche Eigenschaft für das Hochladen von Bildern in Ihrer Entity erstellen, mit Ausnahme der image -Eigenschaft, etwa $ file;

Produkt.php

%Vor%

ProductType.php

%Vor%

Form.html.twig

%Vor%

Endlich ProductController.php

%Vor%

Etwas mehr über upload_directory

app / config / config.html

%Vor%

Erstellen Sie ein uploads -Verzeichnis im Webverzeichnis.

    
Muhammad Shahzad 08.06.2017 16:56
quelle

Tags und Links