0

So, I'm building a small form with a choice. However, I want to pre-select some of those options, as if I was applying selected="selected". I could not find how can this be done in the docs. Help? :D

4

2 回答 2

1

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

例如,对于具有角色数组和方法 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(),
));
于 2012-07-20T08:31:25.243 回答
0

最终比我想象的要简单:

$form['form[selectionMenu]']->select(1);
于 2012-07-26T18:18:03.163 回答