You get an error different from the object because you are not actually creating the $ article variable in your preBind or preSetData functions. It looks like you are mixing $agent and $article
public function preSetData(FormEvent $event) { //here you have $agent $agent = $event->getData(); //here you have $article if (null === $article) { return; } $form = $event->getForm(); //here you have $article $subCategories = $article->getCategory()->getSubCategories(); $this->customizeForm($form, $subCategories); }
Change to:
public function preSetData(FormEvent $event) { $article = $event->getData(); // We can only set subcategories if a category is set if (null === $article->getCategory()) { return; } $form = $event->getForm(); //...
In setting up the form function, you want to add the necessary fields, for example, subcategories:
//taken from the article OP referenced protected function customizeForm($form, $subCatQueryBuilder) { $formOptions = array( 'class' => 'You\YourBundle\Entity\SubCategory', 'multiple' => true, 'expanded' => false, 'property' => 'THE_FIELD_YOU_WANT_TO_SHOW', // I would create a query builder that selects the correct sub cats rather than pass through a collection of objects 'query_builder' => $subCatQueryBuilder, ); // create the field, this is similar the $builder->add() // field name, field type, data, options $form->add($this->factory->createNamed('subCategories', 'entity', null, $formOptions)); }
For the query builder:
/** * @param event FormEvent */ public function preSetData(FormEvent $event) { $agent = $event->getData(); if (null === $article->getCategory()) { return; } $form = $event->getForm(); //Something like $category = $article->getCategory(); $subCatQueryBuilder = $this->dm ->getRepository("YourCatBundle:Subcategory") ->createQueryBuilder("sc") ->join("sc.category", "c") ->where("c.id = :category") ->setParameter("category", $category->getId()); $this->customizeForm($form, $subCatQueryBuilder); }
Luke
source share