0

我在 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,但我也不知道该怎么做。

对此有什么想法吗?

4

2 回答 2

0

好的,我提出了解决方案。我一直在寻找的实际上是以下内容:

<div style="display:none">
{{ form_rest(form) }}
</div>

在明确显示任何其他表单字段后在模板末尾键入此内容可避免任何用户修改我不想修改的字段,同时它仍使用 $POST 方法发送信息。

于 2013-01-18T12:36:07.673 回答
0

我认为您正在寻找一种hidden字段类型:

public function buildForm(...)
{
    $builder
        ->add('login', 'hidden')
        // ...
    ;
}
于 2013-01-06T14:36:08.790 回答