我在 Symfony2 中的一个实体有一个 CRUD。为了创建一个新条目,我有两个控制器功能:
public function newAction($id) {
$entity = new Clientes();
// Get the reference to the Login entity using its ID
$em = $this->getDoctrine()->getManager();
$ref_login = $em->getReference('LoginBundle:Login', $id);
// Put the retrieved reference to the entity
$entity->setLogin($ref_login);
$form = $this->createForm(new ClientesType(), $entity);
return $this
->render('MovinivelBundle:Persona/Clientes:new.html.twig',
array('entity' => $entity,
'form' => $form->createView(),));
}
public function createAction(Request $request) {
$entity = new Clientes();
$form = $this->createForm(new ClientesType(), $entity);
$form->bind($request);
if ($form->isValid()) {
$em = $this->getDoctrine()->getManager();
$em->persist($entity);
$em->flush();
return $this->redirect($this->generateUrl('clientes'));
}
return $this
->render('MovinivelBundle:Persona/Clientes:new.html.twig',
array('entity' => $entity,
'form' => $form->createView(),));
}
在前面的代码中,我在 newAction() 函数中添加了 $id 输入参数,因为我希望它是从外部建立的,因为每个 Clientes 都是 Login 的附加信息,并且必须链接。
在 ClientesType 表单中,我有以下内容:
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('login')
->add('direccion')
->add('localidad')
->add('provincia')
->add('telefono')
;
}
到目前为止它有效。在我的表单中,根据 $id 值选择登录参数。但问题是我希望在创建表单后修复登录参数,因此用户不能从表单中修改它,而只能使用适当的值调用 newAction($id) 函数。
问题是,如果我删除 FormType 中的 ->add('login') 行,它就不再起作用了。我想到了两个选择:
- 以某种方式隐藏表单中的“登录”,但保持它工作,虽然我不知道如何,或者
- 将 $id 参数和 $request 参数一起作为输入参数传递给 createAction,但我也不知道该怎么做。
对此有什么想法吗?