2011-12-09 89 views
2

我在我的FormType的Symfony2:窗體視圖 - 增加對實體字段類型另一場

$builder->add('privileges', 'entity', array(
       'label' => 'Privileges', 
       'expanded' => true, 
       'multiple' => true, 
       'class' => 'AcmeStoreBundle:AdminPrivilege', 
       'property'=> 'description', 
       'query_builder' => function(EntityRepository $er) use ($category) 
       { 
          return $er->createQueryBuilder('p') 
            ->where('p.categoryid = :categoryID') 
            ->andWhere('p.parentid = -1') 
            ->setParameter('categoryID', $category->getId()) 
            ->orderBy('p.position', 'ASC'); 
       } 
      )); 

這裏buildForm方法下面的代碼,如果parentid是大於-1,那麼我想在創建parentid大於-1的複選框後顯示更多形式的組件。

我在谷歌搜索,並一直無法找到辦法做到這一點,任何人都可以幫忙嗎?

回答

1

Mat。 如果我理解正確,您可以注入parentid和實體管理器以形成控制器的類型構造。 因此,您可以在將字段添加到構建器之前運行查詢,並使用if-else。例如:

public function __construct($parentId, $em) 
{ 
    $this->parentId = $parentId; 
    $this->em = $em; 
} 

public function buildForm(FormBuilder $builder, array $options) 
{ 
    $choices = $this->em->getRepository()->callNeededMethod(); 

    if($this->parentId){ 
     $builder->add([someFieldParams]); 
    }else{ 
     $builder->add([anoutherFieldParams]); 
    } 
}