php - How to know how many items a choice field has inside the controller - Symfony2 -
i want count choice's items after form has been created. field simple symfony's choice field query_builder create items. how can achieve this?
<?php class mycontroller { public function indexaction() { $form = $this->createform(new myformwithchoicefieldtype()); // suppose field named "countries" $items = count(???); } }
thanks in advance.
here's how categories.
notice have categoryrepository. can use methods repository inside query_builder options in formtype classes , in controller.
my findallcategories() method returns query builder object, therefore can have method in repository called countcategories() returns scalar count of same query builder object.
this allows me access count method in controller , makes sure couting consistent query builder using find categories.
this simple example becomes more useful if have more complex finder methods joins , clauses.
in controller:
<?php use site\frontendbundle\form\type\categorytype; public function indexaction() { $em = $this->getdoctrine()->getmanager(); $repo = $em->getrepository('sitefrontendbundle:category'); $form = $this->createform(new categorytype()); $count = $repo->countallcategories(); return $this->render('sitefrontendbundle:category:count.html.twig', array( 'form' => $form->createview(), 'count' => $count )); }
in form type:
<?php namespace site\frontendbundle\form\type; use symfony\component\form\abstracttype; use symfony\component\form\formbuilderinterface; use symfony\component\optionsresolver\optionsresolverinterface; use site\frontendbundle\repository\categoryrepository; class categorytype extends abstracttype { public function buildform(formbuilderinterface $builder, array $options) { $builder ->add('category', 'entity', array( 'class' => 'sitefrontendbundle:category', 'property' => 'title', 'query_builder' => function(categoryrepository $cr) { return $cr->findallcategories(); } )) ; } public function setdefaultoptions(optionsresolverinterface $resolver) { $resolver->setdefaults(array( 'data_class' => 'site\frontendbundle\entity\category' )); } public function getname() { return 'category_type'; } }
and in category repository:
<?php namespace site\frontendbundle\repository; use doctrine\orm\entityrepository; class categoryrepository extends entityrepository { public function findallcategories() { return $this->createquerybuilder('c') ->orderby('c.lft', 'asc') ; } public function countallcategories() { return $this ->findallcategories() ->select('count(c.id)') ->getquery() ->getsinglescalarresult() ; } }
if have questions let me know.
Comments
Post a Comment