2013-06-27 1 views
0

Я создаю форму, которая использует тип Entity. Тип формы сущности отображает роли как список флажков. Но я не знаю, как установить значения по умолчанию. Мне нужно получить значения по умолчанию из БД, а затем динамически проверить некоторые из этих параметров.Symfon2: Как установить значения по умолчанию (параметры) для типа поля Entity?

Согласно документации, похоже, что опция «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

Вы должны определили ManyToMany отношения между Пользователем и ролью, с некоторыми традиционными методами на пользователь лицу: 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();