2013-05-21 55 views
1

我想調用表單類的函數。函數生成數組並寫入實體庫類中。使用該數組我將生成動態表單字段。 這裏是實體庫類的功能。如何在symfony2中的表單類型中調用實體庫的函數

public static $roleNameMap = array(
      self::ROLE_SUPER_ADMIN => 'superAdmin', 
      self::ROLE_MANAGEMEN => 'management', 
      self::ROLE_MANAGERS => 'manager', 
      self::ROLE_IT_STAFF => 'itStaff', 
      self::ROLE_CS_CUSTOMER => 'csCustomer', 
      self::ROLE_CS => 'cs', 
      self::ROLE_DEALER => 'dealer', 
      self::ROLE_ACCOUNT_STAFF => 'accountStaff', 
      self::ROLE_BROKER_USER => 'staff', 
    ); 

    public function getGroupListArray() 
     { 
      $qb = $this->createQueryBuilder('g') 
       ->orderBy('g.hierarchy','ASC'); 
      $query = $qb->getQuery(); 
      $groupList = $query->execute(); 
      $roleNameMap = array(); 
      foreach ($groupList as $role){ 
       $roleNameMap[$role->getId()] = $role->getRole(); 
      } 

      return $roleNameMap; 
     } 

下面是我的表單構建器類,我想調用上面的實體存儲庫函數。

public function buildForm(FormBuilderInterface $builder, array $options) { 

     $builder->add('routeId', 'hidden'); 

     foreach (GroupListRepository::$roleNameMap as $key=>$value){ 
      $builder->add($value, 'checkbox',array('label' => '', 'required' => false,)); 
     }  
    } 

我能夠得到的靜態變量顯示在上面的代碼,但是,我有困惑,我應該如何訪問存儲庫函數的形式生成器類中的Symfony2。

在此先感謝。

回答

5

它在表單構建器中不可用,通常不是必需的。 Symfony的工作方式也並非如此。對於你想要做的事情,你可以嘗試這樣的事情。它將創建與角色列表相對應的複選框列表。

$builder->add(
    'roles', 
    'entity', 
    array(
    'class' => 'Acme\DefaultBundle\Entity\Group', 
    'expanded' => true, 
    'multiple' => true, 
    'property' => 'role', // Or use __toString() 
    'query_builder' => function ($repository) { 
     return $repository->createQueryBuilder('g') 
     ->orderBy('g.hierarchy', 'ASC'); 
    }    
) 
); 

查看http://symfony.com/doc/master/reference/forms/types/entity.html

如果您確實需要表單構建器中的存儲庫,那麼請創建表單類型作爲服務並將實體管理器注入DIC。或者在創建時直接將它傳遞給表單類型。

0

你並不需要創建一個查詢生成器功能,並且可以使用查詢從系統信息庫,像這樣:

形式:

'query_builder' => function(MyCustomEntityRepository $ttr) { 
    return $ttr->queryForCustomResultsWithQueryBuilder(); 
} 

在倉庫:

public function queryForCustomResultsWithQueryBuilder($published=true) { 
    $queryBuilder = $this->getEntityManager()->createQueryBuilder(); 

    return $queryBuilder->select('tt') 
      ->from('ifm\CustomBundle\Entity\CustomEntity','tt') 
      ->where('tt.published = ?1') 
      ->orderBy('tt.code', 'ASC') 
      ->setParameters(array(1=>$published)) 
    ; 
} 

請注意queryForCustomResultsWithQueryBuilder不會返回QueryBuilder結果。如果你還需要一個結果,你需要在reposiory中寫一個find函數。

相關問題