%PDF- %PDF-
Direktori : /home/emtnaeewxm/www/src/EEM/ArticleBundle/Form/ |
Current File : /home/emtnaeewxm/www/src/EEM/ArticleBundle/Form/ArticleType.php |
<?php namespace EEM\ArticleBundle\Form; use EEM\ArticleBundle\Entity\Marque; use EEM\ArticleBundle\Entity\Famille; use EEM\ArticleBundle\Entity\Article; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\Extension\Core\Type\ChoiceType; use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\OptionsResolver\OptionsResolver; use Symfony\Component\Form\Extension\Core\Type\TextType; use Symfony\Bridge\Doctrine\Form\Type\EntityType; use Doctrine\ORM\EntityRepository; use Symfony\Component\Form\FormEvent; use Symfony\Component\Form\FormEvents; use Symfony\Component\Form\FormInterface; use Symfony\Component\Validator\Constraints\NotBlank; use Doctrine\ORM\EntityManager; class ArticleType extends AbstractType { /** * {@inheritdoc} */ public function buildForm(FormBuilderInterface $builder, array $options) { $type_form=$options['type_form']; $builder ->add('codeABarre',TextType::class,[ "label"=>"Code à barre", "required"=>false, 'attr' => [ 'autocomplete' => 'off', 'placeholder' => 'Code à barre']]) ->add('color',TextType::class,[ "label"=>"Couleur", "required"=>false, 'attr' => [ 'autocomplete' => 'off', 'placeholder' => 'Couleur']]) ->add('famille', EntityType::class, [ 'class' => 'EEMArticleBundle:Famille', 'choice_label' => 'name', 'query_builder' => function (EntityRepository $er) { return $er->createQueryBuilder('p') ->orderBy('p.name', 'ASC'); }, 'placeholder' => 'Tous', 'label' => 'Famille', 'required' => false, ]) ; if($type_form=='edit') { $builder ->add('prixFinal', TextType::class, [ "label" => "Prix vente", "required" => false, 'attr' => [ 'autocomplete' => 'off', 'placeholder' => 'Prix vente'], 'constraints' => [ new NotBlank(['message' => 'Prix vente obligatoire']) ] ]); } $addFacilityForm = function (FormInterface $form, $famille_id) { $form->add('marque', EntityType::class, array( 'class' => 'EEMArticleBundle:Marque', 'placeholder' => 'Tous', 'label' => 'Marque', 'choice_label' => 'name', 'required' => false, 'query_builder' => function (EntityRepository $er) use ($famille_id) { // this does the trick to get the right options return $er->createQueryBuilder('p') ->leftJoin('p.familles','familles') ->addSelect('familles') ->where('familles.id = :famille_id') ->setParameter('famille_id', $famille_id) ->orderBy('p.name', 'ASC'); } )); }; $builder->addEventListener( FormEvents::PRE_SET_DATA, function (FormEvent $event) use ($addFacilityForm) { $famille = $event->getData()->getFamille(); $famille_id = $famille ? $famille->getId() : null; $addFacilityForm($event->getForm(), $famille_id); } ); $builder->addEventListener( FormEvents::PRE_SUBMIT, function (FormEvent $event) use ($addFacilityForm) { $data = $event->getData(); $famille_id = array_key_exists('famille', $data) ? $data['famille'] : null; $addFacilityForm($event->getForm(), $famille_id); } ); $addFacilityForm = function (FormInterface $form, $marque_id) { $form->add('modele', EntityType::class, array( 'class' => 'EEMArticleBundle:Modele', 'placeholder' => 'Tous', 'label' => 'Modèle', 'choice_label' => 'name', 'required' => false, 'query_builder' => function (EntityRepository $er) use ($marque_id) { // this does the trick to get the right options return $er->createQueryBuilder('t') ->where('t.marque = :marque_id') ->setParameter('marque_id', $marque_id) ->orderBy('t.name', 'ASC'); } )); }; $builder->addEventListener( FormEvents::PRE_SET_DATA, function (FormEvent $event) use ($addFacilityForm) { $marque = $event->getData()->getMarque(); $marque_id = $marque ? $marque->getId() : null; $addFacilityForm($event->getForm(), $marque_id); } ); $builder->addEventListener( FormEvents::PRE_SUBMIT, function (FormEvent $event) use ($addFacilityForm) { $data = $event->getData(); $marque_id = array_key_exists('marque', $data) ? $data['marque'] : null; $addFacilityForm($event->getForm(), $marque_id); } ); } /** * {@inheritdoc} */ public function configureOptions(OptionsResolver $resolver) { $resolver->setDefaults(array( 'data_class' => 'EEM\ArticleBundle\Entity\Article', 'type_form' => '' )); } /** * {@inheritdoc} */ public function getBlockPrefix() { return 'article_type'; } }