Javascript 当用户返回页面时保存最后一个表过滤器查询

Javascript 当用户返回页面时保存最后一个表过滤器查询,javascript,symfony,Javascript,Symfony,我是Symfony的新手。我有一个包含5个过滤器的表,我希望在用户再次返回到该页时保留它们的状态(保存最后一个查询),因为过滤器被重置了 我一直在读关于如何做的书,因为我不知道。我读过关于html web存储,关于会话变量,但我找不到任何关于如何执行的示例,请有人解释一下哪种方法是最好的,以及如何应用 这是我在控制器上的filterAction: /** * @Route("/filterFichas/", name="filterFichas") */ public function fi

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

我一直在读关于如何做的书,因为我不知道。我读过关于html web存储,关于会话变量,但我找不到任何关于如何执行的示例,请有人解释一下哪种方法是最好的,以及如何应用

这是我在控制器上的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();
         });
     }
函数filterFichas(){
$.blockUI({消息:'Cargando datos,por-provour-espere…});
var idPeriodo=$('#selectPeriodoActual').val();
$(“#tabla”).load(“{path('filterFichas')}}”,
{
collectivo:$(“#选择collectivo”).val(),
rol:$(“#selectRol”).val(),
ESTADOOBJETIVOS:$(“#选择ESTADOOBJETIVOS”).val(),
EstadosFichas:$(“#选择EstadosFichas”).val(),
periodo:idPeriodo
},
函数(){
$.unbui();
});
}

当用户返回具有最后一个筛选表时,如何保存用户执行的最后一个筛选操作

最简单的方法是使用,如果继承了BaseController,则可以在控制器内部轻松访问

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

因此,对于处理参数,您必须首先检查它是否已经在
$request->query
参数包中。如果没有,请在会话中查找一个值,如果该值仍然不存在,则返回默认值(在您的情况下,可能是
null

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

$session = $this->get('session');
...
$myParam = $request->request->get('myParam', $session->get('myParam'));
if($myParam !== null)
{
    $session->set('myParam', $myParam);
}
这样,如果请求和会话中都未定义
myParam
,则
$myParam
将为
null
。无论哪种方式,如果检索到的值不为null,则将其存储到会话中以供进一步使用


但是请注意,因为我们在这里讨论的是会话,所以这些保存的参数将仅在用户会话期间有效。如果用户关闭web浏览器并返回,以前保存的参数将丢失。

您可以使用cookies保存筛选值

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

非常感谢你!!!但是有效的是$.cookie($(“#selectEstadoFichas”).val(),1,{expires:10});