0

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

/**
 * @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是空的有没有办法保持更改页面时使用相同的参数。

谢谢 :)

4

2 回答 2

0

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

在 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保持不变。
我希望代码足够清晰并有所帮助。

于 2020-06-15T16:38:23.857 回答
0

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

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

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

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

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

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

最佳解决方案

IMO最好和最干净的解决方案是有一个像这样的年份和月份的路线"/bills/year/{year<[1-9]\d*>}/month/{month<[1-9]\d*>}/page/{page<[1-9]\d*>}"

于 2020-06-15T16:39:10.633 回答