Meine Anwendung übergibt derzeit Daten mithilfe des Konstruktors an meinen Formulartyp, wie in dieser Antwort empfohlen . Im Symfony 2.8-Upgrade-Handbuch wird jedoch empfohlen, eine Typinstanz an die createForm
Funktion zu übergeben:
Das Übergeben von Typinstanzen an Form :: add (), FormBuilder :: add () und die FormFactory :: create * () -Methoden ist veraltet und wird in Symfony 3.0 nicht mehr unterstützt. Übergeben Sie stattdessen den vollständig qualifizierten Klassennamen des Typs.
Before: $form = $this->createForm(new MyType()); After: $form = $this->createForm(MyType::class);
Gibt es eine Alternative, da ich keine Daten mit dem vollqualifizierten Klassennamen weitergeben kann?
Antworten:
Dies hat auch einige unserer Formen gebrochen. Ich habe das Problem behoben, indem ich die benutzerdefinierten Daten über den Options-Resolver geleitet habe.
Geben Sie in Ihrem Formular Folgendes ein:
Wenn Sie das Formular dann in Ihrem Controller erstellen, übergeben Sie es als Option anstatt im Konstruktor:
quelle
Hier kann ein anderer Ansatz verwendet werden - Inject Service zum Abrufen von Daten.
Beispiel:
quelle
Für den Fall, dass jemand die Funktionen 'createNamedBuilder' oder 'createNamed' aus dem Dienst form.factory verwendet, finden Sie hier einen Ausschnitt zum Festlegen und Speichern der Daten. Sie können das Feld 'Daten' nicht verwenden (lassen Sie diese Null) und müssen die übergebenen Daten / Entitäten als
$options
Wert festlegen .Ich habe auch @ sarahg-Anweisungen zur Verwendung der Optionen setAllowedTypes () und setRequired () eingefügt, und es scheint gut zu funktionieren, aber Sie müssen zuerst das Feld mit setDefined () definieren.
Wenn Sie die Daten festlegen möchten, müssen Sie sie auch innerhalb des Formulars zum Feld "Daten" hinzufügen.
In Controller verwende ich getBlockPrefix, da getName in 2.8 / 3.0 veraltet war
Regler:
Bilden:
quelle
So übergeben Sie die Daten an ein eingebettetes Formular für alle Benutzer von Symfony 3. Führen Sie zuerst genau das aus, was @sekl oben beschrieben hat, und führen Sie dann die folgenden Schritte aus:
In Ihrem primären FormType
Übergeben Sie die Variable mit ' entry_options ' an das eingebettete Formular.
In Ihrem eingebetteten FormType
Fügen Sie die Option dem optionsResolver hinzu
Greifen Sie auf die Variable in Ihrer buildForm-Funktion zu. Denken Sie daran, diese Variable vor der Builder-Funktion festzulegen. In meinem Fall musste ich Optionen basierend auf einer bestimmten ID filtern.
quelle