2012-01-27 2 views
6
내가 심포니 2에 Entity 필드 유형을 구축하고 관련 개체의 필터 목록 빌더 쿼리에 매개 변수를 전달하려는

:이 기능에 $ ID를 전달할 수있는 방법엔티티 필드 형 사용자 지정 쿼리 매개 변수

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

을 inside formMapper?

답변

8

PHP 5.3의 클로저를 사용할 수 있습니다. 클로저를 사용하는 대부분의 언어는이 작업을 자동으로 수행하지만, PHP는 목록을 명시 적으로 지정해야합니다.

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

좋은 방법은 형태로 다음 양식을 만들 때 옵션 배열을 사용하므로 배열의 ID를 전달하는 것입니다이 수행

이 그것은 주목해야한다
+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); } )) ; } 
방금 ​​추가 할 수 있음 FormType의 $ options에 임의의 항목; FormType의 getDefaultOptions 메소드를 대체하여 선언해야합니다. –

관련 문제