Symfony形式,通过分页保存过滤

时间:2014-09-01 10:44:53

标签: forms symfony pagination

我在同一页面上使用过滤形式和分页来显示大量对象。 如果我使用POST表单,经过分页过滤重置。如果我使用GET表单过滤工作,但URL不清楚,甚至有令牌。

这样的事情: ?形式[date_from] [年份] =&放大器;形成[date_from] [月] =&放大器;形成[date_from] [日] =&放大器;形成[DATE_TO] [年份] =&放大器;形成[DATE_TO] [月] =放大器;形成[DATE_TO] [天] =&安培;形式[电子邮件] = email和安培;形式[提交] =&安培;形成[_token] = Nk0prilVJiROZaQQKvCt-hRfnKdh0IdDOWOIer

是否有办法让网址更清晰,隐藏令牌和未使用的参数?

2 个答案:

答案 0 :(得分:0)

好吧,我找不到解决办法和写服务来处理会话中的表格过滤数据。

答案 1 :(得分:0)

保存过滤:在控制器中使用数组:

$filter_array=[];
if ($search_form->isSubmitted() && $search_form->isValid()) {
    $search_form->getData();
    //save post/get form data without empty fields
    $filter_array[$search_form->getName()]=array_filter(
        $request->get($search_form->getName()),
        function($value) { return $value !== ''; }); 
        //... etc
}

解决方案1-在页面链接中创建表单,并使用$ filter_array

添加隐藏字段

解决方案2-页面链接使用脚本添加隐藏的表单字段和页码并提交表单,但是单击之前可以修改表单。

解决方案3-将分页器导航和搜索结果放入div中,对所有操作使用jquery.load()(发送表单,页面链接,$(文档).ready()...)。该网址将类似于domain / page /#page_1:

{% for i in range(1, paginator.getTotalPages()) %}
    <li {% if paginator.getPage() == i  %} class="active"{%endif%}>
    <a href="#page_{{i}}" onClick="
        $('{{selector}}').load('{{ paginationPath }}',
        {{filter_array|merge({page: i,})|json_encode()}});"
        href="#page_{{i}}">{{ i }}</a>
        </li>
{%endfor%}