2016-12-03 14 views
0

Ich lerne mit Symfony arbeiten und alle sieht sehr gut aus, aber ich muss einige benutzerdefinierte Formen machen, und ich weiß nicht, wie mit meinem Fall ausgeführt werden.Symfony Form Felder Manipulation

Gibt es eine Möglichkeit, dynamische Formulare basierend auf XML-Definitionsdateien wie auf Magento zu erstellen? Was ich erreichen möchte, ist Build-Formulare, die Schlüssel-Wert-Speicher in der Datenbank mit benutzerdefinierten benutzerdefinierten Eingangstyp zum Zeitpunkt der Erstellung des Formulars entschieden haben, sondern als eine Präsentation für Benutzer/Admins Ich möchte auf Bereiche strukturiert sein -> Abschnitte.

Gibt es eine Möglichkeit, dies zu machen?

Vielen Dank.

+0

Sie können alles, was Sie brauchen mit Symfony bauen, aber nicht eine eingebaute Lösung existieren. PS: Bitte lesen Sie die StackOverflow-Richtlinien wie: [Welche Themen kann ich auf StackOverflow stellen?] (Http://stackoverflow.com/help/on-topic) und [Wie stelle ich eine gute Frage?] (Http://stackoverflow.com/help/how-to-ask). –

Antwort

2

Leider bietet die Form Component diese Funktionalität nicht. Sie können es jedoch selbst implementieren oder Pakete von Drittanbietern verwenden. Die FormBuilderInterface ist eine nette deklarative API für form generation. Sie können ein eigenes Konfigurationsformat definieren und es zum Erstellen von Formularen verwenden.

Zum Beispiel:

use Symfony\Component\Form\AbstractType; 
use Symfony\Component\Form\FormBuilderInterface; 
use DOMDocument; 

class XmlBasedFormType extends AbstractType 
{ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     // Better if the format will be as similar to the FormBuilder options: 
     $formConfig = DOMDocument::loadXML(<<<'XML' 
      <form> 
       <field name="foo" type="text" label="Foo"/> 
       <field name="bar" type="textarea" label="Bar"/> 
       <field name="baz" type="checkbox" label="Baz"/> 
      </form> 
XML 
     ); 

     foreach ($formConfig->getElementsByTagName('field') as $fieldElement) { 
      $name = $fieldElement->getAttribute('name'); 
      $type = $fieldElement->getAttribute('type'); 
      $label = $fieldElement->getAttribute('label'); 

      // Build a form element: 
      $builder->add($name, $type, ['label' => $label]); 
     } 
    } 
} 

Auch kann die Config Component in diesem Fall nützlich sein.

Aber die vollständige Implementierung aller Formularfunktionen erfordert viel Arbeit. Verwenden Sie eine Lösung von Drittanbietern, z. B. Dynamic Form Bundle. Dieses Bundle generiert Symfony-Formulare über YAML-Konfigurationsdateien. (Ich habe einige Erfahrung mit dieser Lösung und es funktioniert gut.)

+0

Das klingt wunderbar. Du mein Freund hat mich auf einen viel klareren Weg geführt. Ich hatte jetzt eine solch komplexe Lösung in meinem Kopf, aber du hast mir einen einfachen Weg gezeigt. Hut ab. – Nebunel

+0

Ich bin froh zu helfen. Aber die Formen sind wirklich ein kompliziertes Ding und Versuche, sie vollständig deklarativ zu beschreiben, sind immer schwierig. – Timurib

+0

Ich werde mein Bestes versuchen mit dem, was ich brauche und basierend auf dem, was Sie mir gesagt haben. Im Grunde möchte ich einen Konfigurationsbereich wie magento style erstellen, da ich mir nicht sicher bin, ob ich in Zukunft weitere Konfigurationsschlüssel hinzufügen werde und ich glaube wirklich, dass XML-Definitionen für Eingaben in Formularen der beste Weg sind ein bisschen Schmerz sein) – Nebunel