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