A voir également:
- Symfony form with multiple entities
- Ecran multiple pc - Guide
- Excel cellule choix multiple - Guide
- Copier coller multiple - Guide
- Google form sans compte google - Forum Google Docs
- Paris multiple 2/6 explication - Forum Loisirs / Divertissements
3 réponses
Salut,
je me demande pourquoi tu souhaites hydrater un objet Advert (article) et un objet customer (client) avec un même formulaire.
Le formulaire que tu présentes semble être destiné à un advert et un advert est j'imagine en relation avec un customer.
Est-ce que ton entité customer dispose de champs title, content, published ?
Peux tu nous montrer le mapping qu'il y a pour les entités advert et customer ?
je me demande pourquoi tu souhaites hydrater un objet Advert (article) et un objet customer (client) avec un même formulaire.
Le formulaire que tu présentes semble être destiné à un advert et un advert est j'imagine en relation avec un customer.
Est-ce que ton entité customer dispose de champs title, content, published ?
Peux tu nous montrer le mapping qu'il y a pour les entités advert et customer ?
ha ok, j'ai compris...
Le plus simple est d'imbriquer un formulaire customerType dans un advertType.
exemple :
advertType :
customerType :
controller
je n'ai pas testé, il se peut que cela ne fonctionne pas directement, mais l'idée est là.
Le plus simple est d'imbriquer un formulaire customerType dans un advertType.
exemple :
advertType :
class AdvertType extends AbstractType { /** * @param FormBuilderInterface $builder * @param array $options */ public function buildForm(FormBuilderInterface $builder, array $options) { $builder ->add('title', TextType::class) ->add('content', TextareaType::class) ->add('published', CheckboxType::class) ->add('customer', CustomerType::class) ->add('save', SubmitType::class); } /** * @param OptionsResolver $resolver */ public function configureOptions(OptionsResolver $resolver) { $resolver->setDefaults( [ 'data_class' => Advert::class, ] ); } }
customerType :
class CustomerType extends AbstractType { /** * @param FormBuilderInterface $builder * @param array $options */ public function buildForm(FormBuilderInterface $builder, array $options) { $builder ->add('lname', TextType::class) ->add('fname', TextType::class); } /** * @param OptionsResolver $resolver */ public function configureOptions(OptionsResolver $resolver) { $resolver->setDefaults( [ 'data_class' => Customer::class, ] ); } }
controller
public function addAction(Request $request) { $advert = new Advert(); $customer = new Customer(); $advert->setCustomer($customer); $form = $this->createForm(AdvertType::class, $advert); $form->handleRequest($request); if ($form->isValid()) { // bla bla } return $this->render('xxxBundle:Advert:add.html.twig', ['form' => $form->createView()]); }
je n'ai pas testé, il se peut que cela ne fonctionne pas directement, mais l'idée est là.
bonsoir,
voici la solution pour avoir des FORMULAIRES IMBRIQUES
advertType:
customerType
et pictureType
deux questions:
1)puisque le formulaire est créer automatiquement comment faire pour le personnaliser avec les CSS (de mon template) .
2)est ce qu'il faut créer un et un seul xxxType pour une entite XXX. car je veux hydrater au début deux champs de customer avec le formulaire1, puis optionnellement compléter les autres informations via un autre formulaire2 (sachant que l'entité customer possède 4 champs à remplir manuellement).
merci encore.
voici la solution pour avoir des FORMULAIRES IMBRIQUES
advertType:
<?php namespace xx\XXXBundle\Form; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\OptionsResolver\OptionsResolver; use Symfony\Bridge\Doctrine\Form\Type\EntityType; // use Symfony\Component\Form\Extension\Core\Type\CheckboxType; use Symfony\Component\Form\Extension\Core\Type\SubmitType; use Symfony\Component\Form\Extension\Core\Type\TextareaType; use Symfony\Component\Form\Extension\Core\Type\TextType; // class AdvertType extends AbstractType { /** * {@inheritdoc} */ public function buildForm(FormBuilderInterface $builder, array $options) { $builder ->add('title', TextType::class) ->add('content', TextareaType::class) ->add('picture', PictureType::class, array('data_class' => null)) ->add('published', CheckboxType::class, array('required' => false)) ->add('category', EntityType::class, array( 'class' => 'xxXXXBundle:Category', 'choice_label' => 'longname', 'multiple' => false, 'expanded' => false, )) ->add('customer', CustomerType::class) ->add('save', SubmitType::class) ; } /** * {@inheritdoc} */ public function configureOptions(OptionsResolver $resolver) { $resolver->setDefaults(array( 'data_class' => 'xx\XXXBundle\Entity\Advert' )); } /** * {@inheritdoc} */ public function getBlockPrefix() { return 'xx_XXXbundle_advert'; } }
customerType
<?php namespace xx\XXXBundle\Form; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\OptionsResolver\OptionsResolver; //use Symfony\Component\Form\Extension\Core\Type\CollectionType; use Symfony\Bridge\Doctrine\Form\Type\EntityType; // use Symfony\Component\Form\Extension\Core\Type\CheckboxType; use Symfony\Component\Form\Extension\Core\Type\DateType; use Symfony\Component\Form\Extension\Core\Type\FormType; use Symfony\Component\Form\Extension\Core\Type\SubmitType; use Symfony\Component\Form\Extension\Core\Type\TextareaType; use Symfony\Component\Form\Extension\Core\Type\TextType; // class CustomerType extends AbstractType { /** * {@inheritdoc} */ public function buildForm(FormBuilderInterface $builder, array $options) { $builder ->add('lnamecust', TextType::class) ->add('fnamecust', TextType::class) ->add('telcust', TextType::class) ->add('governate', EntityType::class, array( 'class' => 'xxXXXBundle:Governate', 'choice_label' => 'name', 'multiple' => false, 'expanded' => false, )) ; } /** * {@inheritdoc} */ public function configureOptions(OptionsResolver $resolver) { $resolver->setDefaults(array( 'data_class' => 'xx\XXXBundle\Entity\Customer' )); } /** * {@inheritdoc} */ public function getBlockPrefix() { return 'xx_XXXbundle_customer'; } }
et pictureType
<?php namespace xx\XXXBundle\Form; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\OptionsResolver\OptionsResolver; use Symfony\Component\Form\Extension\Core\Type\FileType; class PictureType extends AbstractType { /** * {@inheritdoc} */ public function buildForm(FormBuilderInterface $builder, array $options) { $builder->add('file', FileType::class) ; } /** * {@inheritdoc} */ public function configureOptions(OptionsResolver $resolver) { $resolver->setDefaults(array( 'data_class' => 'xx\XXXBundle\Entity\Picture' )); } /** * {@inheritdoc} */ public function getBlockPrefix() { return 'XX_xxxbundle_picture'; } }
deux questions:
1)puisque le formulaire est créer automatiquement comment faire pour le personnaliser avec les CSS (de mon template) .
2)est ce qu'il faut créer un et un seul xxxType pour une entite XXX. car je veux hydrater au début deux champs de customer avec le formulaire1, puis optionnellement compléter les autres informations via un autre formulaire2 (sachant que l'entité customer possède 4 champs à remplir manuellement).
merci encore.
1)puisque le formulaire est créer automatiquement comment faire pour le personnaliser avec les CSS (de mon template) .
tu peux utiliser "attr" exemple :
https://symfony.com/doc/current/reference/forms/types/form.html#attr
pour les labels : https://symfony.com/doc/current/reference/forms/types/form.html#label-attr
2)est ce qu'il faut créer un et un seul xxxType pour une entite XXX. car je veux hydrater au début deux champs de customer avec le formulaire1, puis optionnellement compléter les autres informations via un autre formulaire2 (sachant que l'entité customer possède 4 champs à remplir manuellement).
merci encore.
Dans ton cas tu peux soit
- en créer 2
- soit mettre 2 champs supplémentaire dans ton seul et unique formulaire avec l'attribut mapped à false, puis hydrater ton entité dans le controller en récupérant les valeurs de ces deux champs
.
https://symfony.com/doc/current/reference/forms/types/form.html#mapped
tu peux utiliser "attr" exemple :
$builder->add('file', FileType::class, ['attr' => ['class' => 'btn btn-default']]);
https://symfony.com/doc/current/reference/forms/types/form.html#attr
pour les labels : https://symfony.com/doc/current/reference/forms/types/form.html#label-attr
2)est ce qu'il faut créer un et un seul xxxType pour une entite XXX. car je veux hydrater au début deux champs de customer avec le formulaire1, puis optionnellement compléter les autres informations via un autre formulaire2 (sachant que l'entité customer possède 4 champs à remplir manuellement).
merci encore.
Dans ton cas tu peux soit
- en créer 2
- soit mettre 2 champs supplémentaire dans ton seul et unique formulaire avec l'attribut mapped à false, puis hydrater ton entité dans le controller en récupérant les valeurs de ces deux champs
.
https://symfony.com/doc/current/reference/forms/types/form.html#mapped
je joue sur la simplicité & la rapidité: le minimum nécessaire d'information, ce ui explique la présence de deux objets dans le meme formulaire.
remarque: 1)
il y aura une page pour compléter quelques champs optionnels tels que: tel,city, ...
2)j ai pas encore décidé est ce que je le garde ou non le champ category,
Question: comment faire pour hydrater ces deux objets en garadnt le meme principe mentionné ci-dessus.
merci
entité advert
entité customer