在不同的路由中验证和处理表单,Symfony2

时间:2013-11-15 02:11:41

标签: forms symfony process routes distinct

我正在为我的用户做一个搜索页面。表单显示在路径/ home中,收集的数据将发送到路径/搜索。这些用于进行我在/搜索时显示的搜索。问题是,如果表单在/ search处理并且存在任何验证错误,则表单将重新加载到/ search而不是/ home。有没有办法得到这个?

//routing.yml

home:
path:  /
defaults: { _controller: UsuarioBundle:Default:home}

search:
path:  /search
defaults: { _controller: UsuarioBundle:Default:search}

//UsuarioBundle/Controller/DefaultController.php

public function homeAction()
{
    $request = $this->getRequest();
    $usuario = new Usuario();
    $formulario = $this->createForm(new UsuarioBusquedaType(), $usuario, array(
                                                                    'action' => $this->generateUrl('search'),
                                                                    'method' => 'POST',
                                                                    ));
return $this->render('UsuarioBundle:Default:portada.html.twig', array('formulario' => $formulario->createView() ));
}

public function searchAction()
{
    $request = $this->getRequest();
    $usuario = new Usuario();
    $formulario = $this->createForm(new UsuarioBusquedaType(), $usuario, array(
                                                                    'action' => $this->generateUrl('search'),
                                                                    'method' => 'POST',
                                                                    ));
    $formulario->handleRequest($request);
    if ($formulario->isValid()) {
         // Validate and search in DB
         return $this->render('UsuarioBundle:Default:resultado.html.twig', array('usuarios' => $usuarios));
    }
    return $this->render('UsuarioBundle:Default:portada.html.twig', array('formulario' => $formulario->createView() ));

我也试过这样做:显示表单并在同一路径/ home中处理它然后通过重定向发送数据但我不知道如何将数据传递给新路由。有什么想法吗?

提前致谢。

1 个答案:

答案 0 :(得分:0)

您可以尝试这样的事情:

if ($formulario->isValid()) {
     // Validate and search in DB
     return $this->render('UsuarioBundle:Default:resultado.html.twig', array('usuarios' => $usuarios));
}
return $this->homeAction();