【问题标题】:Symfon2: How to set default values (options) for Entity field type?Symfon2:如何为实体字段类型设置默认值(选项)?
【发布时间】:2013-06-24 10:06:24
【问题描述】:

我正在创建一个使用实体类型的表单。 实体表单类型将角色显示为复选框列表。 但我不知道如何设置默认值。我需要从 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,

));

【问题讨论】:

    标签: forms symfony entity


    【解决方案1】:

    您必须在 User 和 Role 之间定义了 ManyToMany 关系,并在 User 实体上使用了一些传统方法: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();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-12
      • 2012-11-20
      • 2013-11-03
      • 1970-01-01
      • 2016-01-06
      • 2017-02-06
      相关资源
      最近更新 更多