0

エンティティ型を使用するフォームを作成しています。エンティティ フォーム タイプは、ロールをチェックボックスのリストとして表示します。しかし、デフォルト値を設定する方法がわかりません。DB からデフォルト値を取得し、それらのオプションのいくつかを動的にチェックする必要があります。

ドキュメントによると、「preferred_choices」オプションはこの仕事をしないようです。

誰か助けてくれませんか?

一部の文が意味をなさない場合は、私の英語について申し訳ありません。

3 テーブル:

ユーザーロール

+---------+---------+------+-----+---------+----------------+
| 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    |                |
+---------+---------+------+-----+---------+----------------+

管理者ユーザー

+-----------+-------------+------+-----+---------+----------------+
| 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,

));
4

1 に答える 1

0

User エンティティに対するいくつかの従来のメソッド (setRoles、getRoles、addRole...) を使用して、User と Role の間に ManyToMany 関係を定義しておく必要があります。

フォームに読み込まれるデータは、 $user などの 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();
于 2013-06-27T07:38:21.827 に答える