2012-01-27 12 views
6

voglio costruire un tipo di Entity campo in Symfony 2 e passare un parametro di query per la lista del filtro di oggetti correlati:campo Entity parametro di query tipo personalizzato

$formMapper 
      ->add('article_subcategories', 'entity', 
        array(
         'label' => 'Podkategorie', 
         'multiple' => true, 
         'expanded' => true, 
         'read_only' => true, 
         'class' => 'FachowoArticleBundle:ArticleSubcategory', 
         'query_builder' => function (EntityRepository $er) 
         { 
          return $er 
            ->createQueryBuilder('sc') 
             ->where('sc.article_category = :id') 
             ->orderBy('sc.name', 'ASC') 
             ->setParameter('id', $id); 
         } 
        )); 

Come posso passare $ id a questa funzione all'interno di formMapper?

risposta

8

È possibile utilizzare chiusure di PHP 5.3. La maggior parte delle lingue con chiusure lo fanno automaticamente, ma PHP richiede di specificare esplicitamente l'elenco.

'query_builder' => function (EntityRepository $er) use ($id) 
    { 
     return $er 
     ->createQueryBuilder('sc') 
     ->where('sc.article_category = :id') 
     ->orderBy('sc.name', 'ASC') 
     ->setParameter('id', $id); 
    } 
1

Un bel modo è quello di utilizzare la matrice opzioni quando si crea il modulo, in modo da passare id nella matrice, quindi nella forma do:

public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    $id = $options['id']; 
    $builder 
     ->add('foo', 'entity', array(
      'class' => 'Foo', 
      'query_builder' => function (EntityRepository $er) use ($id) { 
       return $er->findByBar($id); 
      } 
     )) 
    ; 
} 
+2

Va notato che non si può semplicemente aggiungere elementi arbitrari alle opzioni $ di FormType; devi dichiararli eseguendo l'override del metodo getDefaultOptions di FormType. –

Problemi correlati