2012-01-27 33 views
6
Ben Symfony'de 2'de Entity alan türünü oluşturmak ve ilgili nesnelerin filtre listesi için oluşturucu sorgulamak için parametre geçirmek isteyen

: ben bu işleve $ id geçebilir nasılVarlık alan türü özel sorgu parametresi

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

formMapper içinde?

cevap

8

PHP 5.3'ün kapatma noktalarını kullanabilirsiniz. Kapaklı çoğu dil bunu otomatik olarak yapar, ancak PHP, listeyi açıkça belirtmenizi gerektirir.

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

güzel bir yolu şeklinde, sonra formu oluştururken seçenekleri dizi kullandığından, dizideki id geçmektir yapın:

Bu unutulmamalıdır
+2

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); } )) ; } 
sadece ekleyemezsiniz bir FormType'ın $ seçeneklerine rasgele öğeler; FormType'ın getDefaultOptions yöntemini geçersiz kılarak bunları bildirmeniz gerekir. –

İlgili konular