2013-06-27 120 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(); 
相关问题