Advertisement
WarGot

Untitled

Sep 17th, 2014
430
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 4.68 KB | None | 0 0
  1. <?php
  2. namespace GCS\ManagerBundle\Form\Type;
  3.  
  4. use Symfony\Component\DependencyInjection\ContainerAware;
  5. use Symfony\Component\Form\AbstractType;
  6. use Symfony\Component\Form\FormBuilderInterface;
  7. use Symfony\Component\OptionsResolver\OptionsResolverInterface;
  8. use FOS\UserBundle\Form\Type\RegistrationFormType as BaseType;
  9.  
  10. use Symfony\Component\Form\FormEvent;
  11. use Symfony\Component\Form\FormEvents;
  12.  
  13. use Doctrine\ORM\EntityRepository;
  14. use GCS\ManagerBundle\Entity\Building;
  15. class GuestPopulationFormType extends AbstractType
  16. {
  17.     private $options;
  18.     private $manager;
  19.    
  20.     public function __construct($manager, array $options = null)
  21.     {
  22.         $this->options = $options;
  23.         $this->manager = $manager; // Get kernel
  24.     }  
  25.        
  26.     public function buildForm2(FormBuilderInterface $builder, array $options){
  27.         parent::buildForm($builder, $options);
  28.         // добавление пользовательского поля
  29.         $builder
  30.                 ->add('buildingId', 'choice', array('required' => false, 'multiple' => false, 'expanded' => false), array('auto_initialize' => false))
  31.                 ->add('floorId', 'choice', array('required' => false, 'multiple' => false, 'expanded' => false))
  32.                 ->add('roomId', 'choice', array('required' => false, 'multiple' => false, 'expanded' => false))        
  33.         ;
  34.     }
  35.         public function buildForm(FormBuilderInterface $builder, array $options){
  36.             parent::buildForm($builder, $options);
  37.            
  38.             // Стартовый первый селект выбора строения
  39.             $builder->add('buildingId', 'entity', array(
  40.                 'class' => 'GCS\ManagerBundle\Entity\Building',
  41.                 'required' => true,
  42.                 'multiple' => false,
  43.                 'expanded' => false,
  44.                 'label' => 'Select building',
  45.                 'query_builder' => function(EntityRepository $er) {
  46.                     return $er->createQueryBuilder('c')
  47.                                     ->select('c')
  48.                                     ->where("c.hotelId = :hotel_id")
  49.                                     ->setParameter('hotel_id', 1);
  50.                 },
  51.             ));
  52.             $builder
  53.                 ->add('floorId', 'choice', array('required' => false, 'multiple' => false, 'expanded' => false))
  54.                 ->add('roomId', 'choice', array('required' => false, 'multiple' => false, 'expanded' => false));
  55.                            
  56.             $formAddFloor = function ($form, $data = null) {
  57.                 $id = $data->getId();
  58.                 $form->add('floorId', 'entity', array(
  59.                     'class'       => 'GCS\ManagerBundle\Entity\Floor',
  60.                     'required' => true,
  61.                     'multiple' => false,
  62.                     'expanded' => false,
  63.                     'query_builder' => function(EntityRepository $er) use ($id) {
  64.                         return $er->createQueryBuilder('c')
  65.                                         ->select('c')
  66.                                         ->where("c.hotelId = :hotel_id and c.fbuilding = :building_id")
  67.                                         ->setParameter('hotel_id', 1)
  68.                                         ->setParameter('building_id', $id);
  69.                     },
  70.                 ));
  71.             };         
  72.             $formAddRoom = function ($form, $data = null) {
  73.                 echo __LINE__;
  74.                 $id = $data->getId();
  75.                 $form->add('floorId', 'entity', array(
  76.                     'class'       => 'GCS\ManagerBundle\Entity\Room',
  77.                     'required' => true,
  78.                     'multiple' => false,
  79.                     'expanded' => false,
  80.                     'query_builder' => function(EntityRepository $er) use ($id) {
  81.                         return $er->createQueryBuilder('c')
  82.                                         ->select('c')
  83.                                         ->where("c.hotelId = :hotel_id and c.fbuilding = :building_id")
  84.                                         ->setParameter('hotel_id', 1)
  85.                                         ->setParameter('building_id', $id);
  86.                     },
  87.                 ));
  88.             };         
  89.             $builder->get('floorId')->addEventListener(
  90.                 FormEvents::POST_SUBMIT,
  91.                 function (FormEvent $event) use ($formAddRoom) {
  92.                     echo __LINE__;
  93.                     $formAddRoom($event->getForm()->getParent(), $event->getForm()->getData());
  94.                 }
  95.             );
  96.                        
  97.             $builder->get('buildingId')->addEventListener(
  98.                 FormEvents::POST_SUBMIT,
  99.                 function (FormEvent $event) use ($formAddFloor) {
  100.                     $formAddFloor($event->getForm()->getParent(), $event->getForm()->getData());
  101.                 }
  102.             );
  103.            
  104.            
  105.                        
  106.            
  107.            
  108.          
  109.         }
  110.        
  111.    
  112.     public function setDefaultOptions(OptionsResolverInterface $resolver){
  113.         //$resolver->setDefaults(array(
  114. //            'data_class' => 'GCS\GuestBundle\Entity\Guest'
  115. //        ));
  116.     }
  117.    
  118.     public function getName(){
  119.         return 'gcs_guest_registration';
  120.     }
  121. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement