2017-03-23 1 views
0

Je dois créer un formulaire pour créer une collection de la même entité, mais je ne veux pas répéter tous les champs pour chaque entrée de la collection (seulement les champs qui auront des différences valeurs).Formulaire Symfony pour créer une collection d'entités partageant des entrées

Imaginez une entité Product:

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

Je voudrais un formulaire pour créer plusieurs Product entités du même category en même temps. Donc le formulaire doit avoir un champ category, et un ensemble de name et price.

Ma forme ressemblera à quelque chose comme:

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, 
     )); 
    } 
} 

Quelqu'un sait s'il y a un moyen de remplir automatiquement toutes les entités du type de collection avec les champs parents? (seulement category dans cet exemple)

Merci!

Répondre

0

Je résoudrai ceci en ayant formulaire pour le (s) produit (s) qui ne nécessite pas de valeur pour le membre de la catégorie. Créez ensuite un seul champ non mappé pour recevoir une valeur de catégorie. Une fois de retour dans le contrôleur après la soumission, appliquez la valeur de catégorie non mappée à chacune des entités Product, puis exécutez/persist/etc.

Extrayez le Symfony Forms page, recherchez "mappé" et vous verrez comment ajouter un champ non mappé à un formulaire.

+0

Ceci est un exemple très basique que je fournis, mais dans mon cas d'utilisation réelle, cela ne concerne pas un seul domaine et je veux garder l'avantage des contraintes que je mets sur mon entité pour tous les champs. J'espérais que symfony proposait quelque chose pour ce cas d'utilisation. – Seb33300

+0

Vous pouvez instancier un produit supplémentaire et faire en sorte que son formulaire nécessite uniquement le champ catégorie. Maintenant, vous obtenez toutes les contraintes de la catégorie Product :: à la Doctrine, les formulaires Symfony, etc. "Utiliser un champ de formulaire pour un ensemble d'objets" est un cas d'utilisation plutôt inhabituel. Exploitez ce que vous pouvez, mais vous devez vous attendre à un compromis et à du travail supplémentaire. – JasonGabler