使用symfony2保存会话中的过滤器数据

使用symfony2保存会话中的过滤器数据

问题描述:

我有一个问题给你。我在页面中有一个按价格排序产品的过滤器。如果我过滤产品,例如我有3页,当我切换到页面2过滤器消失。我需要在会话中保存这些数据?或存在另一种解决方案 我的控制器:使用symfony2保存会话中的过滤器数据

if ($form->isValid()) { 
     $aFilter['iMinPrice'] = $form["min_price"]->getData(); 
     $aFilter['iMaxPrice'] = $form["max_price"]->getData(); 
    } 
    //Search products 
    $aProducts   = $repositoryProduct->getProductsOrderByDateDesc($id,null,$aFilter); 

    $paginator = $this->get('knp_paginator'); 
    $pagination = $paginator->paginate(
     $aProducts, 
     $page, 
     3 
    ); 

    //Send data to view 
    return $this->render('ShopDesktopBundle:Category:category.html.twig',array(
     'category'   => $category, 
     'pagination'  => $pagination, 
     'form' => $form->createView() 
    )); 

我的资料库:

if(!empty($aFilter)){ 
     if(isset($aFilter['iMinPrice'])){ 
      $qb->andWhere('p.product_price >= :price_min') 
       ->setParameter('price_min',$aFilter['iMinPrice']); 
     } 
     if(isset($aFilter['iMaxPrice'])){ 
      $qb->andWhere('p.product_price <= :price_max') 
       ->setParameter('price_max',$aFilter['iMaxPrice']); 
     } 
    } 

而我的观点:

<form action="{{ path('show_product_category',{ 'id':category.getId(), 'name':category.getCategoryLink() }) }}" method="post" {{ form_enctype(form) }}> 
<div class="accordion-inner"> 
    {{ form_widget(form.min_price) }} 
    {{ form_widget(form.max_price) }} 
</div> 
</form> 
{{ knp_pagination_render(pagination, null, {}, {'style': 'pager', 'prev_label': '← Older', 'next_label': 'Newer →'}) }} 

我的路线:

show_product_category: 
path:  /{id}/{name}/{page} 
defaults: { _controller: ShopDesktopBundle:Category:showCategory, page: 1} 
requirements: 
    id: \d+ 
    page: \d+ 
    _method: GET|POST 

请帮助我! Thx提前!任何建议请如何将查询参数追加到链接?

+0

难道你不能使用追加一个查询字符串在你的网址,你可以得到你的网页过滤器?所以如果你切换到第2页,你只需追加它并使用symfony的输入'GET'。 – Cedric 2015-03-31 06:57:28

+0

我编辑了问题,加入我的路线和我的表格 – TanGio 2015-03-31 07:02:19

+0

如果我在表格方法GET更改url是这样的: ?product [min_price] = 0&product [max_price] = 30 如果切换到页面2 url是:/ 2。 – TanGio 2015-03-31 07:06:05

您可以尝试将所有GET参数附加到分页的所有链接。通过这种方式,每次切换页面时都会有这些内容。

随着KPNPaginator,你可以通过你的请求查询的分页渲染器,就像这样:

{{ knp_pagination_render(pagination, null, _requestQuery, {'style': 'pager', 'prev_label': '← Older', 'next_label': 'Newer →'}) }} 

事实上,KPN文档指出:

默认情况下,当渲染方法被触发,分页使用提供的标准参数呈现 模板:

  • pagination parameters,就像在范围页面,当前页面等..
  • route - 这是用来生成页面,分拣网址
  • request_query,它包含了所有GET请求参数
  • extra,分页模板参数

除分页参数外,其他可修改为 或适用于某些使用情况。通常情况下,如果默认配置不正确(因为在子请求中呈现 ),您可能需要设置路由 。或者添加附加查询或查看 参数。

+0

任何想法请 – TanGio 2015-03-31 08:32:10

+0

答案改进。请下次阅读文档... – Jean 2015-03-31 08:58:52

+0

你是什么意思?我的回答有帮助吗?如果是这样,请问你能接受吗? – Jean 2015-03-31 15:25:42