【问题标题】:Save filter data in session using symfony2使用 symfony2 在会话中保存过滤器数据
【发布时间】:2015-03-31 06:45:36
【问题描述】:

我有一个问题要问你。我在页面中有一个按价格对产品进行排序的过滤器。如果我过滤产品,例如我有 3 页,当我切换到第 2 页时,过滤器就会消失。我需要在会话中保存这些数据吗?还是存在另一种解决方案? 我的控制器:

 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

请帮帮我!提前谢谢!!!有什么建议请如何将查询参数附加到链接?

【问题讨论】:

  • 你不能使用在你的 url 中附加一个查询字符串来获取你的页面的过滤器吗?因此,如果您切换到第 2 页,您只需附加它并使用 symfony 的输入 GET
  • 我通过添加路线和表单来编辑问题
  • 如果我在表单方法 GET 中更改 url 是这样的: ?product[min_price]=0&product[max_price]=30 如果切换到第 2 页,则 url 是: /2 。跨度>
  • 如何切换到第 2 页?是菜单还是链接?如果是这样,您应该在视图中附加查询参数......或者如果它是通过在 URL 浏览器栏中输入,那么它应该是 session
  • 我编辑了问题,我使用 knp_paginator 切换到第 2 页

标签: php symfony symfony-forms php-5.3 symfony-2.3


【解决方案1】:

您可以尝试将所有 GET 参数附加到分页的所有链接。 这样,每次切换页面都会有。

使用 KPNPaginator,您可以将请求查询传递给分页渲染器,如下所示:

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

事实上,KPN 文档指出:

默认情况下,当 render 方法被触发时,分页会渲染 提供标准参数的模板:

  • pagination parameters,比如范围内的页面、当前页面等等..
  • route - 用于生成页面,排序url
  • request_query,包含所有GET请求参数
  • extra,分页模板参数

除了分页参数,其他都可以修改 或适应某些用例。通常它是可能的,你可能需要 如果默认值没有正确匹配,则设置路由(因为 在子请求中呈现)。或添加额外的查询或视图 参数。

【讨论】:

  • 什么意思?我的回答有帮助吗?如果可以,请您接受吗?
猜你喜欢
  • 1970-01-01
  • 2012-04-18
  • 1970-01-01
  • 2015-11-17
  • 1970-01-01
  • 1970-01-01
  • 2012-07-23
  • 2012-02-03
  • 1970-01-01
相关资源
最近更新 更多