Symfony2嵌入式控制器和表单验证问题

时间:2012-03-29 22:27:50

标签: php forms validation controller symfony

我有一个编辑特许经营权的模板。在这个模板中,我有两件事:一个嵌入式控制器,它向我显示一个汇总表,其中包含已经存储在数据库中的所有特许经营权,每行都有一个“编辑”按钮,表格中填充了特许经营的数据我是目前正在编辑

问题在于,当我处理表单并且验证失败时,嵌入式控制器创建的汇总表向我展示了我尝试使用我在表单中输入的值进行修改的特许经营权,即使它没有t通过验证,数据库从未更新过。

该代码有一些西班牙语单词所以,只是为了澄清,“franquicia”的意思是“特许经营”

呈现和验证表单的方法是:

public function editarAction($superusuario_id, $franquicia_id)
{
    $request = $this->getRequest();

    $em = $this->getDoctrine()->getEntityManager();
    $franquicia = $em->getRepository('FacturaBundle:Franquicia')->findOneById($franquicia_id);

    $form = $this->createForm(new FranquiciaType(), $franquicia);

    if($request->getMethod() == 'POST') 
    {
        $form->bindRequest($request);
        if($form->isValid()) 
        {
            $em = $this->getDoctrine()->getEntityManager();
            $em->persist($franquicia);
            $em->flush();
            return $this->redirect($this->generateUrl('s_listar_franquicias', array('superusuario_id'=>$superusuario_id)));
        }
    }

    return $this->render('FacturaBundle:Superusuario:franquicia-editar.html.twig', 
                   array('superusuario_id'=>$superusuario_id, 
                         'franquicia_id'=>$franquicia_id, 
                         'form'=>$form->createView(),  
                         'franquicia'=>$franquicia ));
}

嵌入式控制器使用的方法是:

public function listarTodasAction($superusuario_id)
{
    $em = $this->getDoctrine()->getEntityManager();
    $franquicias = $em->getRepository('FacturaBundle:Franquicia')->findAll();

    return $this->render('FacturaBundle:Superusuario:franquicia-listar-todas.html.twig', array('superusuario_id'=>$superusuario_id, 'franquicias'=>$franquicias));
}

我没有粘贴模板的代码,因为它太长了但是如果需要我会这么做。

任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:2)

基本问题是$ form-> bindRequest实际上用已发布的信息更新$ franquicia。 D2缓存所有内容,以便稍后更改显示。使用refresh将其设置回原始数据:

    if($form->isValid()) 
    {
        ...
    }
    $this->getDoctrine()->getEntityManager()->refresh($franquicia);