我的symfony2应用程序中有一个名为User的实体。我使用“创建表单构建器”在控制器中创建了一个表单。
我在控制器中的代码如下:
$user = new User();
$form = $this->createFormBuilder($user);
$resultForm = $form->add('username')
->setAction($this->generateUrl('usermanagement_create'))
->setMethod('POST')
->add('email')
->add('roles', 'entity', array(
'class' => 'PortalBundle\Entity\Roles',
'expanded' => true,
'multiple' => true,
'required' => false,
'constraints' => array(
new NotBlank(),
),
))
->getForm()
;
我必须渲染表单,因为选择了一些值作为字段角色的默认值。
答案 0 :(得分:1)
我可以建议将表单创建为Your/Bundle/Path/Form/YourFormType
吗?
这样你的表单几乎可以在任何地方使用,如果你需要它,你可以简单地调用它。而且,你的控制器会很干净。
写下解决方案,你可以用不同的方式进行
empty_data
属性您需要注入(如果您将表单定义为服务)或传递(如果您为表单定义外部类)或使用(在您的情况下)和实体管理器来检索默认选择对象。我将根据您的代码段向您展示一个解决方案
$em = $this
->getDoctrine()
->getManager();
$user = new User();
$form = $this->createFormBuilder($user);
$resultForm = $form
->add('username')
->setAction($this->generateUrl('usermanagement_create'))
->setMethod('POST')
->add('email')
->add('roles', 'entity', array(
'class' => 'PortalBundle\Entity\Roles',
'empty_data' => $em->getReference("PortalBundle:Roles", //put here pk to retrieve default role)
'expanded' => true,
'multiple' => true,
'required' => false,
'constraints' => array(
new NotBlank(),
),
))
->getForm();
如果您需要多个角色,请编写一个查询以返回它们并传递给empty_data
$em = $this
->getDoctrine()
->getManager();
$user = new User();
$default_roles = $em
->getRepository("Path/To/Roles/Repo")
->findDefaults(); //maybe a method you need to implement
$user->setRoles($default_roles);
//and leave form code as is