当用户返回页面

时间:2018-01-24 17:57:08

标签: javascript symfony

我是Symfony的新手。我有一个包含5个过滤器的表,我想保持它们的状态(保存最后一个查询)当用户再次返回到该表所在的页面时,因为重置了过滤器。

我正在阅读如何做到这一点,因为我不知道。我读了关于html网络存储,关于会话变量,但我找不到任何如何做的例子,可以请有人解释我哪个是最好的方法来做和如何申请。

这是我的控制器上的filterAction:

/**
 * @Route("/filterFichas/", name="filterFichas")
 */
public function filterFichasAction(Request $request)
{
    $em = $this->getDoctrine()->getManager();
    $txtColectivo = $request->request->get('colectivo');
    $txtRol = $request->request->get('rol');
    $txtEstadosObjetivos = $request->request->get('EstadosObjetivos');
    $txtEstadosFichas = $request->request->get('EstadosFichas');
    $idPeriodo = $request->request->get('periodo');

    $periodo = $em->getRepository('GOCModelBundle:Periodo')->findOneBy(array('id' => $idPeriodo));


    $respuesta = array();
    foreach ($periodo->getFicha() as $ficha){
        $flag = true;

        if($txtColectivo != "todas"){
            $colectivo= $em->getRepository('GOCModelBundle:Colectivo')->findOneBy(array('nombre' => $txtColectivo ));
            if($ficha->getUser()->getColectivo() != $colectivo){
                $flag = false;
            }
        }

        if($txtRol != "todas"){
            $rol = $em->getRepository('GOCModelBundle:Rol')->findOneBy(array('rol' => $txtRol ));
            if($ficha->getUser()->getRol() != $rol){
                $flag = false;
            }
        }

        if($txtEstadosFichas != "todas"){
            if(count($ficha->getFichacontenidoestado()) > 0){
                $estadoContenido = $em->getRepository('GOCModelBundle:Estadocontenido')->findOneBy(array('descripcion' => $txtEstadosFichas ));
                if($ficha->getFichacontenidoestado()[count($ficha->getFichacontenidoestado()) - 1]->getEstadocontenido() != $estadoContenido){
                    $flag = false;
                }
            }else{
                $flag = false;
            }
        }

        if($txtEstadosObjetivos != "todas"){
            if(count($ficha->getFichaobjetivosestado()) > 0){
                $estadoObjetivos = $em->getRepository('GOCModelBundle:Estadobjetivo')->findOneBy(array('descripcion' => $txtEstadosObjetivos ));
                if($ficha->getFichaobjetivosestado()[count($ficha->getFichaobjetivosestado()) - 1]->getEstadobjetivo() != $estadoObjetivos){
                    $flag = false;
                }
            }else{
                $flag = false;
            }
        }

        if($flag){
            $respTemp = array(
                'user' => $ficha->getUser(),
                'ficha' => $ficha,
            );
            array_push($respuesta, $respTemp);
        }

    }

    return $this->render('GOCFichasBundle:Default:fichasFilter.html.twig', array(
        'usr' => $respuesta,
    ));

}

这是我对过滤器的js动作:

function filterFichas() {
         $.blockUI({ message: '<h4><img src="{{ asset('assets/global/plugins/cubeportfolio/cubeportfolio/img/cbp-loading.gif') }}" /> Cargando datos, por favor espere...</h4>' });
         var idPeriodo = $('#selectPeriodoActual').val();
         $( "#tabla" ).load( "{{ path('filterFichas')}}",
             {
                 colectivo:$( "#selectColectivo" ).val(),
                 rol: $( "#selectRol" ).val(),
                 EstadosObjetivos: $( "#selectEstadoObjetivos" ).val(),
                 EstadosFichas: $( "#selectEstadoFichas" ).val(),
                 periodo: idPeriodo
             },
             function() {
             $.unblockUI();
         });
     }

当用户返回时,如何保存用户执行的最后一次过滤操作,以及最后一个过滤后的表。

2 个答案:

答案 0 :(得分:1)

您可以使用Cookie来保存过滤器值。

$.cookie($( "#selectEstadoFichas" ).val(), 1, { expires : 10 });

答案 1 :(得分:0)

最简单的方法是使用session component,如果它继承BaseController,可以在控制器内轻松访问。

您可以使用$this->get('session')检索控制器内的会话服务。之后,您可以用来与之交互的界面与您正在使用的Request对象的参数包几乎相同(getset方法具有相同的签名)。

因此,为了处理参数,您必须首先检查它是否已经在$request->query参数包中。如果没有,请查看会话内部的值,如果它仍然不存在,则回退到默认值(在您的情况下可能是null)。

您可以利用get method的第二个可选参数来定义默认值,以防在一行中找不到任何内容。之后,您可以将检索到的值保存在会话中,以便在用户稍后返回时检索它。

$session = $this->get('session');
...
$myParam = $request->request->get('myParam', $session->get('myParam'));
if($myParam !== null)
{
    $session->set('myParam', $myParam);
}

通过这样做,如果请求和会话中都未定义$myParam,则null将为myParam。无论哪种方式,如果检索到的值不为空,则将其存储到会话中以供进一步使用。

但请注意,由于我们在此处讨论会话,因此这些保存的参数将仅持续用户会话的持续时间。如果您的用户关闭了Web浏览器并返回,则先前保存的参数将丢失。