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