2012-01-27 8 views
6

Quiero construir un tipo Entity campo en Symfony 2 y pasar un parámetro a Generador de consultas para la lista de filtros de objetos relacionados:campo Entidad parámetro de consulta de tipo personalizado

$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); 
         } 
        )); 

¿Cómo puedo pasar $ id para esta función dentro de formMapper?

Respuesta

8

Puede usar los cierres de PHP 5.3. La mayoría de los lenguajes con cierres lo hacen automáticamente, pero PHP requiere que especifiques la lista explícitamente.

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

Una buena manera es utilizar la matriz de opciones cuando se crea el formulario, por lo que pasar Identificación de la matriz, a continuación, en la forma de hacer:

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

Cabe señalar que no se puede simplemente añadir artículos arbitrarios a las $ opciones de FormType; debe declararlos anulando el método getDefaultOptions de FormType. –

Cuestiones relacionadas