2013-06-27 153 views
0

我正在創建一個使用實體類型的表單。 實體表單類型將Roles顯示爲複選框列表。 但我不知道如何設置默認值。我需要從數據庫獲取默認值,然後動態檢查其中一些選項。Symfon2:如何爲實體字段類型設置默認值(選項)?

根據文檔,似乎'preferred_choices'選項不會做這項工作。

任何人都可以請幫我嗎?

對不起,如果我的英文句子沒有意義。

3表:

的UserRole

+---------+---------+------+-----+---------+----------------+ 
| Field | Type | Null | Key | Default | Extra   | 
+---------+---------+------+-----+---------+----------------+ 
| id  | int(11) | NO | PRI | NULL | auto_increment | 
| user_id | int(11) | YES | MUL | NULL |    | 
| role_id | int(11) | YES | MUL | NULL |    | 
+---------+---------+------+-----+---------+----------------+ 

ADMINUSER

+-----------+-------------+------+-----+---------+----------------+ 
| Field  | Type  | Null | Key | Default | Extra   | 
+-----------+-------------+------+-----+---------+----------------+ 
| id  | int(11)  | NO | PRI | NULL | auto_increment | 
| username | varchar(25) | NO | UNI | NULL |    | 
| salt  | varchar(32) | NO |  | NULL |    | 
| password | varchar(40) | NO |  | NULL |    | 
| email  | varchar(60) | NO | UNI | NULL |    | 
| is_active | tinyint(1) | NO |  | NULL |    | 
+-----------+-------------+------+-----+---------+----------------+ 

角色

+-------+-------------+------+-----+---------+----------------+ 
| Field | Type  | Null | Key | Default | Extra   | 
+-------+-------------+------+-----+---------+----------------+ 
| id | int(11)  | NO | PRI | NULL | auto_increment | 
| name | varchar(50) | NO | UNI | NULL |    | 
+-------+-------------+------+-----+---------+----------------+ 

形式助洗劑:

$builder->add('role', 'entity', array(

    'class' => 'AcmeAdminBundle:Role', 

    'property' => 'name', 

    'multiple' => TRUE, 

    'expanded' => TRUE, 

)); 

回答

0

您必須定義用戶和角色之間的多對多關係,與用戶實體的一些傳統的方法:setRoles,getRoles,addRole ...

數據將在您的形式加載的數據從用戶實例,例如$ user。

$user = new User; // or $user is existing User, same logic 
$rolesYouWantToSetToUser = array('ROLE_1', 'ROLE_2', 'ROLE_3'); 

foreach ($rolesYouWantToSetToUser as $roleId) { 
    // $em must previsouly be set as EntityManager in your code 
    $role = $em->getReference('YourBundle:Role', $roleId); 
    $user->addRole($role); 
} 

// From a controller 
$form = $this->createFormBuilder($user) 
      ->add('roles', 'entity', array(
       'class' => 'AcmeAdminBundle:Role', 
       'multiple' => true, 
       'expanded' => true, 
       'property' => 'name', 
      )) 
      ->getForm(); 
相關問題