2014-01-31 33 views
0

我在Symfony文檔中看到過,並且在自動爲代碼實體的CRUD生成的代碼中創建了兩個用於處理表單的操作。一個動作「首次顯示」表單(具有一條路徑),然後另一條(具有不同的路徑)驗證和處理表單。在出現錯誤的情況下,此操作再次顯示錶單。我看不出爲什麼兩種行爲有不同的路徑?我可以只使用一個動作一個路徑...爲什麼兩個表單的動作?

例如

/** 
* @Route("registrar") 
* @Template 
*/ 
public function registerAction() { 
    $usuario = new \Caja\LiquidacionesBundle\Entity\Usuario(); 

    $form = $this->createForm(new \Caja\LiquidacionesBundle\Form\UsuarioType(), 
      $usuario, 
      array(
       'action' => $this->generateUrl('usuario_crear') 
      )); 

    return array('form' => $form->createView());   
} 

/** 
* @Route("crear", name="usuario_crear") 
* 
*/ 
public function createAction() { 


    $usuario = new \Caja\LiquidacionesBundle\Entity\Usuario(); 
    $form = $this->createForm(new \Caja\LiquidacionesBundle\Form\UsuarioType, $usuario); 


    $form->handleRequest($this->getRequest()); 

    if($form->isValid()) { 


     $factory = $this->get('security.encoder_factory');    

     $encoder = $factory->getEncoder($usuario); 
     $usuario->setPassword($encoder->encodePassword($usuario->getPassword(), $usuario->getSalt()));    

     $em = $this->getDoctrine()->getManager(); 
     $em->persist($usuario); 
     $em->flush(); 

     //TODO: Change this shit 
     return new Response("Usuario creado con exito.");    
    } 

    return $this->render('CajaLiquidacionesBundle:Usuario:registrarUsuario.html.twig', 
       array('form' => $form->createView()) 
      ); 
} 

回答

0

當然你可以使用一個動作,然後決定是否請求方法是POST過程的形式或當它GET剛剛交付表格。反對這一觀點的是,你的控制器行爲變得更大並且包含更多的邏輯。如果沒關係,你可以隨意使用一個動作。

+0

如果將表單配置爲POST,則isValid()方法將返回false,並且表單將被呈現...... 我可以使用第二個動作的路徑來完成所有過程(即http:/ /domain.com/crear)。我不需要添加任何事情的行動。 –

+0

不明白。你問你是否可以在一個行動中做到這一點。現在你告訴我,你可以簡單地使用第二個動作? :D – sebbo

+0

哈哈,我知道我可以做到這一點只是第二個動作...它會顯示窗體並處理它... 但是因爲我在Symfony文檔中看到他們使用兩個動作(和兩個路徑),所以我想知道這樣做的好處是什麼。 以下是我正在談論的內容:http://symfony.com/doc/current/cookbook/doctrine/registration_form.html#handling-the-form-submission。爲什麼不只是一個顯示和處理表單的動作呢? isValid()將在處理操作中返回false,並且表單將被呈現...... 我認爲可能有一個原因... –

相關問題