Ich habe schon eine Weile darüber nachgedacht - ich habe nie begriffen, warum Sie alle Ihre Formulare programmatisch generieren möchten, außer sie würden voll dynamisch sein. Aber meiner Erfahrung nach sind die meisten statisch.
Gehen wir nun zur Hauptfrage - mit Symfony werden alle Ihre Formulare basierend auf der Tabelle generiert, der Sie ein Modul zuordnen (wenn Sie es erstellen). Meine Frage ist, warum möchten Sie diese Formulare generiert? In den meisten Fällen handelt es sich um statische Formulare, die in der Vorlage einfach zu bearbeiten sein sollten.
Das Hauptproblem für mich ist, wenn Sie ein Team von Back-End- und Front-End-Entwicklern haben, und vielleicht auch einige Designer. Und die Designer oder Front-End-Entwickler (die vielleicht viel oder keine PHP-Erfahrung haben) möchten die Form (aus ästhetischen Gründen) im Vorlagenverzeichnis ändern, in dem sich alle Ansichten befinden. Nun, sie können nicht wirklich, weil es alles von einer Formularklasse generiert wird, die speziell für diese Form gebaut wurde. Also, jetzt müssen sie zurück zu den Back-End-Entwicklern gehen und sie bitten, die Dinge für sie zu ändern?
Ich vermisse den Punkt bei der Formulargenerierung, aber wie ich es sehe - wenn es statisch ist, muss es nicht programmgesteuert erzeugt werden, aber wenn es völlig dynamisch ist, dann ist es in Ordnung.
Irgendwelche Ansichten dazu?
Da die verwendeten Feldtypen größtenteils den Schemaspalten ähneln, vorausgesetzt, Sie haben Ihr Schema ursprünglich korrekt erstellt ;-) zB varchar(200)
wird in eine einzeilige Texteingabe, einen MySQL-Langtext, übersetzt übersetzt in ein Textfeld und so weiter. Schnell und einfach, um dann nach einigen Optimierungen zum Rendern zu wechseln. Die generierten Formularklassen bieten Ihnen auch die Möglichkeit, alle Ihre Formular-Widget-Validierer für die Formularüberprüfung freizugeben.
Sie können natürlich die Validator-Klassen verwenden, wo immer Sie wollen, aber das Formular-Framework kapselt dies sehr schön.
Das Rendern des Formulars ist jedoch ein separates Problem. Wie Sie bereits erwähnt haben, haben Sie eine Ansicht dafür. Der faule Ansatz in Symfony ist einfach <?php echo $form; ?>
zu machen, aber es ist besser, die einzelnen Felder selbst darzustellen, zB: <?php echo $form["fieldname"]->render(); ?>
und so weiter. Wenn Ihre Ansichten wie folgt strukturiert sind, sollten Ihre Front-End-Entwickler in der Lage sein, die Felder nach Belieben neu zu ordnen.
Bearbeiten : Hinzufügen von Klassen und anderen Attributen beim Rendern:
%Vor%Edit 2 Im Wesentlichen möchte ich vermitteln, dass Sie immer einen Eckfall finden können, wo das Formularframework in Symfony nicht angemessen ist. Sie werden das wahrscheinlich für jede Komponente in jedem Framework finden ;-) Aber für die meiste Zeit macht es die Arbeit gut und relativ einfach. Wenn Sie sich ständig dagegen wehren, würde ich vorschlagen, dass Sie entweder aus dem falschen Winkel herauskommen oder Sie haben gerade alle oben erwähnten Eckfälle gefunden: -)
Die Formulargenerierung ist eine Funktion, die ein bestimmtes Problem lösen soll. Das Hauptproblem besteht darin, dass Sie beim Erstellen eines Modellobjekts in der Regel ein Formular benötigen, das einfach ist, nur Ihre Felder enthält und basierend auf Ihrer Modellbeschreibung generiert werden kann.
Wenn Sie Ihre Anwendung "gut entworfen" behalten möchten, enthalten Ihre BaseForm-Klassen alle Felder des Modellobjekts, und Sie können diese Klassen erweitern, um bestimmte Formulare zu erstellen. Angenommen, Sie haben ein Benutzerobjekt, und Sie möchten zwei verschiedene Arten der Registrierung basierend auf dem Alter des Registranten. Die beiden Formen sind zu 90% gleich, also können Sie mit Ihrem BaseUserForm ein schönes Design erstellen und es mit zwei verschiedenen spezifischen Formen erweitern, so wie Sie es brauchen. Ein zusätzlicher Vorteil ist, wenn Sie den Namen einer Spalte ändern möchten, Sie müssen das nicht an vielen Stellen, nur an einer Stelle usw. tun.
Diese Codegenerierung ist genau wie bei der ORM-Dateigenerierung, wenn Sie Propel oder Doctrine oder was auch immer verwenden. Die meisten Funktionen dieser Dateien werden nie benutzt, aber es gibt Ihnen einen netten Werkzeugsatz für die Entwicklung .
Als ein Plus: Das Symfony Form Framework war seit der ersten Version immer von RIESIGem Refactoring betroffen, durch 1.1 bis 1.3 haben sie es immer geändert und soweit ich weiß ist die 2.0 Version auch etwas völlig anderes (es wird auch ein unabhängiges Bundle und außerhalb von Symfony wiederverwendbar). Wenn Sie also den aktuellen Formularrahmen nicht nützlich finden, bin ich nicht allzu überrascht, sie sind auch nicht so glücklich damit (soweit ich weiß).
Die meisten Formulare müssen programmgesteuert generiert werden, damit die Fehler überprüft werden können, wenn sie mit Fehlern übermittelt wurden, und das Formular kann teilweise ausgefüllt an den Benutzer zurückgegeben werden, wobei gegebenenfalls Fehler in die Etiketten eingefügt werden. p>
Wenn Ihr Formular statisch ist, gibt es keine Möglichkeit, Informationen zum Validierungsfehler zurückzugeben oder das Formular mit Daten aus der Datenbank oder aus den Feldern, die der Benutzer ausgefüllt hat, vorab zu füllen.