/** * @param FormBuilderInterface $builder * @param array $options */ public function buildForm(FormBuilderInterface $builder, array $options) { $builder->add('images', CollectionType::class, array('type' => ImageType::class, 'allow_add' => true, 'allow_delete' => true, 'required' => false))->add('location', AdvertLocationType::class, array('required' => false))->add('title', TextType::class)->add('content', TextareaType::class)->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'))->add('properties', CollectionType::class, array('type' => PropertyType::class, 'required' => false))->add('price', NumberType::class, array('required' => false))->add('published', CheckboxType::class, array('required' => false)); $builder->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) { $advert = $event->getData(); if ($advert === null) { return; } $fields = $this->em->getRepository('FBAdvertBundle:Field')->getFields(); if ($fields !== null) { foreach ($fields as $field) { $already = false; foreach ($advert->getProperties() as $p) { if ($p->getField() === $field) { $already = true; break; } } if (!$already) { $property = new Property(); $property->setField($field); $advert->addProperty($property); } } } }); }
/** * @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 properties * * @param \FB\AdvertBundle\Entity\Property $properties * @return AdvertSearch */ public function addProperty(\FB\AdvertBundle\Entity\Property $properties) { $this->properties[] = $properties; $properties->setSearch($this); return $this; }