【问题标题】:search result combined with pagerfanta结合pagerfanta的搜索结果
【发布时间】:2020-06-15 14:54:18
【问题描述】:

我有一个显示项目列表的应用程序,在主页中我添加了带有两个输入的表单, 第一个将包含月份值,第二个将包含年份值; 我在控制器内部设置了动作,在该动作中有一个函数接受两个参数“月,年”。

/**
 * @Route("/bills",defaults={"page": "1"} , name="bills", methods={"GET"})
 * @Route("/bills/page/{page<[1-9]\d*>}", name="bills_paginated", methods="GET")
 * @param BillRepository $billRepository
 * @param Request $request
 * @param int $page
 * @return Response
 */
public function indexBills(BillRepository $billRepository,Request $request, int $page): Response
{
    $formBills = $this->createForm(BillsType::class);
    $formBills->handleRequest($request);
    $getArgs= $request->query->get('bills');
    $Bills =$billRepository->unpaidBills($getArgs,$page);

    return $this->render('homePage/bills.html.twig', [
        'formBills'=>$formBills->createView(),
        'Bills'=> $Bills ,
    ]);
}

当我提交搜索表单时,结果按预期显示,页面分页也在那里,但是当我单击下一页例如页面“2”时 发生这种情况是因为$getArgs 是空的 有没有办法在更改页面时保持相同的参数。

谢谢你:)

【问题讨论】:

    标签: php symfony symfony4 symfony-4.3 pagerfanta


    【解决方案1】:

    当您点击“第 2 页”时,您不会发送“年”和“月”数据。

    解决方案 1 - 从控制器注入 bills 表单数据

    我认为,最简单的方法是将$request-&gt;query-&gt;get('bills') 发送到树枝,例如formData。 并在你的树枝上添加'bills' : formData 在你的路线参数bills_paginated

    如果你这样做,symfony 会在你的 url 中添加你的表单数据,当你改变你的页面时你不会丢失它们,所以当你这样做 $getArgs= $request-&gt;query-&gt;get('bills'); 你有你的数据

    解决方案 2 - 从 twig 获取 bills 表单数据

    这是最简单的解决方案,直接在树枝中获取账单表格数据,如下所示:{% set formData = app.request.get('bills') %}。 并在你的树枝上添加'bills' : formData 在你的路线参数bills_paginated

    最佳解决方案

    IMO 最好和最干净的解决方案是像这样"/bills/year/{year&lt;[1-9]\d*&gt;}/month/{month&lt;[1-9]\d*&gt;}/page/{page&lt;[1-9]\d*&gt;}"

    【讨论】:

    • 是的{% set params = app.request.get('bills') %} 在树枝上会更容易;)
    【解决方案2】:

    我自己弄明白了,谢谢大家。 所以如果有人遇到和我一样的问题,我就是这样解决的:

    在 Twig 中显示搜索结果的页面,在 pagerfanta 分页功能的底部,我添加了一个routeParams

    {%
      set params = app.request.get('bills')
    %}
    
    {% if Bills.haveToPaginate %}
          <div class="card-footer pagination">
            {{
               pagerfanta(Bills, 'twitter_bootstrap4_translated',
                 {
                  routeName: 'bills_paginated',
                  routeParams:{bills:params}
                 })
            }}
          </div>
    
    
    {% endif %}
    

    现在,每次我单击特定页面时,params 都会保持不变。
    我希望代码足够清晰并有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-27
      • 2015-09-11
      • 2016-06-11
      • 2020-12-26
      • 1970-01-01
      • 1970-01-01
      • 2017-12-04
      • 1970-01-01
      相关资源
      最近更新 更多