在Symfony2中使用“字段类型”选项时,将选项标记为已选择


Marking choices as selected when using choice Field Type in Symfony2

因此,我正在构建一个有选择的小表单。但是,我想预先选择其中的一些选项,就好像我在应用selected="selected"一样。我在文档中找不到如何做到这一点。帮助?:D

要为窗体设置默认值,需要在窗体的基础数据类中设置这些值。假设基础数据类是一个实体,则在构造时可以在该实体中默认值。如果您不使用实体注释,也不想更改生成的实体类,则可以将默认值设置为实体类的新实例,并将其用作表单的数据。

例如,对于具有角色数组和方法setRoles(array$roles)的用户实体,可以在用户实体的构造函数中默认角色,如下所示(为清晰起见,使用硬编码字符串):

public function __construct()
{
    $this->setRoles(array('ROLE_USER', 'ROLE_READER', 'ROLE_EDITOR');
}

或者,可以在表单显示之前在控制器中默认角色(没有表单类和硬编码字符串的简单示例):

$allRoles = array('ROLE_USER', 'ROLE_READER', 'ROLE_EDITOR', 'ROLE_ADMIN', 'ROLE_SUPER_ADMIN');
$user = new User();
$user->setRoles(array('ROLE_USER', 'ROLE_READER', 'ROLE_EDITOR');
$form = $this->createFormBuilder($user)
    ->add('username', 'text')
    ->add('roles', 'choice',  array('choices' => array_combine($allRoles, $allRoles),
                                    'multiple' => true)
    ->getForm();
return $this->render('AcmeTaskBundle:Default:new.html.twig', array(
    'form' => $form->createView(),
));

最终比我想象的更简单:

$form['form[selectionMenu]']->select(1);