为什么表单有两个动作?

时间:2014-01-31 12:17:29

标签: forms symfony

我已经在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() )
            );
}

1 个答案:

答案 0 :(得分:0)

您当然可以使用一个操作,然后决定请求方法是POST处理表单还是GET只是传递表单。反对的论点是你的控制器动作变得更大并且包含更多逻辑。如果你可以随意使用一个动作。