2012-03-29 129 views
0

我有一个编辑特许经营的模板。在这个模板里面我有两件事:一个嵌入式控制器向我展示一个汇总表,其中包含已经存储在数据库中的所有特许经营权,每行有一个“编辑”按钮,表格中填充了特许经营的数据正在编辑。Symfony2嵌入式控制器和表单验证问题

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

的代码具有一定的西班牙语单词所以,只是为了澄清,“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)); 
} 

我不粘贴模板的代码,因为它太长,但我会做,如果需要。

任何人都可以帮助我吗?

回答

2

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

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

非常感谢人,它的工作! – 2012-03-31 23:47:55