In meiner Anwendung habe ich ein paar Formularfelder mit vielen Optionen. Das Problem, das ich erlebt habe, ist ähnlich wie this question: das Holen und Analysieren aller Optionen bei jedem Seitenladen ist teuer (Twig rendert alle Optionen immer und immer wieder, während kein clientseitiges Caching möglich ist). Dieses Problem hat mich dazu veranlasst, eine Möglichkeit zu schaffen, die Optionen über AJAX an den Browser zu senden. Ziemlich einfache Methode:Erstellen eines 'Ajaxified' Formularfeldtyps
- Holen Sie alle Optionen (Schlüssel-Wert) über AJAX (zum Beispiel, indem Sie/countries.json) und Cache wenn möglich. (In diesem Fall ändern sich die Ländernamen nicht sehr oft.)
- Verwenden Sie selectize, select2 oder ein ähnliches Plugin, um die Optionen in das DOM einzufügen.
- Genießen Sie eine schnellere Formular :-)
Um Symfony von Abfragen alle Optionen zu verhindern (nicht notwendig: sie sind über AJAX geladen) Ich setMaxResults(0)
zum QueryBuilder
hinzugefügt, wenn die Form (durch Hinzufügen einer Option geladen wird über den Controller). Ja, das ist Kludi. Beim Absenden eines Formulars wird immer noch eine Abfrage durchgeführt, da überprüft werden muss, ob die ausgewählte Option vorhanden ist (und nach Einschränkungen sucht).
Ich möchte eine erstellen, die diese Funktionalität der aktuellen EntityType
hinzufügt: laden Sie nicht die Optionen beim Rendern des Formulars, aber überprüfen Sie immer noch, ob die ausgewählte Option vorhanden ist. Ich habe manyexamples bezogen auf dynamically modifying a form gefunden, aber ich habe keine Beispiele gefunden, die sich auf das Ändern nur eines Formularfeldes beziehen, unabhängig von dessen Elternform.
Wie erstelle ich einen solchen Formularfeldtyp? Was ist ein guter Ausgangspunkt? Erweitern Sie EntityType
, ChoiceType
oder einen anderen Ansatz?
Ich benutze bereits Symfony 3.1, so dass lazy loading of form choices (Neu in Symfony 3.2) wird kein Problem sein. Ich bin mir nicht sicher, ob diese neue Funktion mit meinem Problem zusammenhängt.
Mögliches Duplikat von [EntityType erweitern, um zusätzliche Optionen zuzulassen, die mit AJAX-Anrufen festgelegt werden] (http://stackoverflow.com/questions/30178424/extending-entitytype-to-allow-extra-choices-set-with-ajax-calls)) – Alsatian