Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Forms 为什么一个表单有两个动作?_Forms_Symfony - Fatal编程技术网

Forms 为什么一个表单有两个动作?

Forms 为什么一个表单有两个动作?,forms,symfony,Forms,Symfony,我在Symfony文档和为CRUD of doctrine实体自动生成的代码中看到,为处理表单创建了两个操作。一个操作第一次“显示”表单(使用一个路径),然后另一个操作(使用不同路径)验证和处理表单。如果出现错误,此操作将再次显示表单。我不明白为什么两个动作的路径不同?我可以只用一个动作和一条路径 比如说 /** * @Route("registrar") * @Template */ public function registerAction() { $usuario = n

我在Symfony文档和为CRUD of doctrine实体自动生成的代码中看到,为处理表单创建了两个操作。一个操作第一次“显示”表单(使用一个路径),然后另一个操作(使用不同路径)验证和处理表单。如果出现错误,此操作将再次显示表单。我不明白为什么两个动作的路径不同?我可以只用一个动作和一条路径

比如说

 /**
 * @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() )
            );
}

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

如果将表单配置为POST,isValid()方法将返回false,表单仍将呈现。。。我可以使用第二个动作的路径来完成所有的过程(即)。我不需要在动作中添加任何内容,不要理解。你问我是否可以一次完成。现在你告诉我你可以简单地使用第二个动作了达哈,我知道我可以用第二个动作做到。。。它将显示它的形式和过程。。。但是因为我在Symfony文档中看到他们使用了两个动作(和两条路径),所以我想知道这样做的好处是什么。这就是我要说的:。为什么不只是一个显示和处理表单的动作?isValid()将在处理操作中返回false,并且表单仍将呈现。。。我想这可能是有原因的……首先,您可以使用一个操作来验证和保存创建和编辑操作的对象。此外,您还可以创建路由,只发送导致“saveObjectAction”的请求