/** * @param FormBuilderInterface $builder * @param array $options */ public function buildForm(FormBuilderInterface $builder, array $options) { $builder->add('keyWords', TextType::class, array('required' => false))->add('searchInTitle', CheckboxType::class, array('required' => false))->add('priceInterval', SearchIntervalType::class, array('required' => false))->add('category', EntityType::class, array('class' => 'FBAdvertBundle:Category', 'choice_label' => 'name', 'multiple' => false, 'expanded' => false, 'query_builder' => function (EntityRepository $repository) { return $repository->createQueryBuilder('c')->innerJoin('c.parent', 'p')->addSelect('p'); }, 'group_by' => 'parent.name', 'placeholder' => 'advert.choose_category', 'required' => false))->add('intervals', CollectionType::class, array('entry_type' => SearchIntervalType::class, 'required' => false))->add('properties', CollectionType::class, array('entry_type' => PropertyType::class, 'required' => false)); $builder->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) { $search = $event->getData(); if ($search === null) { return; } $fields = $this->em->getRepository('FBAdvertBundle:Field')->getFields(); if ($fields !== null) { foreach ($fields as $field) { $already = false; foreach ($search->getProperties() as $p) { if ($p->getField() === $field) { $already = true; break; } } if (!$already) { if ($field->getHasInterval()) { $interval = new SearchInterval(); $interval->setField($field); $search->addInterval($interval); } else { $property = new Property(); $property->setField($field); $search->addProperty($property); } } } } }); }
/** * Add intervals * * @param \FB\AdvertBundle\Entity\SearchInterval $intervals * @return AdvertSearch */ public function addInterval(\FB\AdvertBundle\Entity\SearchInterval $intervals) { $this->intervals[] = $intervals; $intervals->setSearch($this); return $this; }