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!
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
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