2017-03-23 2 views
0

Ich brauche teilen eine Form, um eine Sammlung von derselben Einheit zu schaffen, aber ich mag nicht für jeden Eintrag der Sammlung alle Felder wiederholen (nur Felder, die unterschiedlichen haben Werte).Symfony Form eine Sammlung von Objekten zu erstellen Eingänge

Stellen Sie sich eine Product Einheit:

class Product 
{ 
    private $category; 
    private $name; 
    private $price; 
} 

Ich würde eine Form wie mehrere Product Einheiten des gleichen category zugleich zu erstellen. So ist die Form sollte man category Feld hat, und eine Sammlung von name und price.

wird meine Form in etwa so aussehen:

class ProductCollectionType extends AbstractType 
{ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder 
      ->add('category') 
      ->add('products', CollectionType::class, array(
       'entry_type' => ProductType::class, 
       'allow_add' => true, 
       'mapped'  => false, 
      )) 
     ; 
    } 

    public function configureOptions(OptionsResolver $resolver) 
    { 
     $resolver->setDefaults(array(
      'data_class' => Product::class, 
     )); 
    } 
} 

class ProductType extends AbstractType 
{ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder 
      ->add('name') 
      ->add('price') 
     ; 
    } 

    public function configureOptions(OptionsResolver $resolver) 
    { 
     $resolver->setDefaults(array(
      'data_class' => Product::class, 
     )); 
    } 
} 

Wer weiß, ob es einen Weg gibt, automatisch alle Objekte in der Sammlung Typ mit den übergeordneten Felder ausfüllen? (Nur category in diesem Beispiel)

Dank!

Antwort

0

Ich würde diese Form, indem lösen (s) für das Produkt (e), die keinen Wert für die Kategorie Mitglied erfordern. Erstellen Sie dann ein einzelnes nicht zugeordnetes Feld, um einen Kategoriewert zu erhalten. Wenn Sie nach der Übergabe wieder im Controller sind, wenden Sie den Wert für die nicht zugeordnete Kategorie auf jede Product-Entität an und verarbeiten/persistieren Sie dann/etc.

Kasse der Symfony Forms page, wenn nach „kartiert“ und Sie werden sehen, wie ein nicht zugeordnete Feld zu einem Formular hinzuzufügen.

+0

Dies ist ein sehr einfaches Beispiel Ich reiche, aber in meinem realen Anwendungsfall dies nicht betreffen nur ein Feld, und ich möchte die Vorteile der Zwänge halten ich für alle Felder auf meiner Einheit setzen. Ich hoffte, dass Symfony etwas für diesen Anwendungsfall bereitstellte. – Seb33300

+0

Sie könnten ein zusätzliches Produkt instanziieren und das Formular nur für das Kategoriefeld benötigen. Jetzt erhalten Sie alle Einschränkungen der Produkt :: Kategorie a Doctrine, Symfony Formen usw. "Verwenden Sie ein Formularfeld für eine Reihe von Objekten" ist ein ziemlich ungewöhnlicher Anwendungsfall. Nutzen Sie, was Sie können, aber Sie müssen einen Kompromiss und etwas zusätzliche Arbeit erwarten. – JasonGabler

Verwandte Themen