结合 pagerfanta 的搜索结果
search result combined with pagerfanta
我有一个显示项目列表的应用程序,在主页上我添加了带有两个输入的表单,
第一个包含月份值,第二个包含年份值;
我在控制器内部设置了动作,在该动作中有一个函数接受两个参数 "month, year".
/**
* @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
是空的
有没有办法在更改页面时保持相同的参数。
谢谢:)
我自己弄明白了,谢谢大家。
所以如果有人遇到和我一样的问题,我就是这样解决的:
在显示搜索结果的页面中,在 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
都保持不变。
我希望代码足够清晰并有所帮助。
当您点击 'Page 2' 时,您不会发送 'year' 和 'month' 数据。
解决方案 1 - 从控制器注入 bills
表单数据
我认为,最简单的方法是将 $request->query->get('bills')
作为 formData
发送到树枝。
在你的树枝上添加 'bills' : formData
在你的路线参数中 bills_paginated
如果你这样做,symfony 会在你的 url 中添加你的表单数据,当你更改页面时你不会丢失它们,所以当你这样做时 $getArgs= $request->query->get('bills');
你有你的数据
解决方案 2 - 从 twig
获取 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*>}"
我有一个显示项目列表的应用程序,在主页上我添加了带有两个输入的表单, 第一个包含月份值,第二个包含年份值; 我在控制器内部设置了动作,在该动作中有一个函数接受两个参数 "month, year".
/**
* @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
是空的
有没有办法在更改页面时保持相同的参数。
谢谢:)
我自己弄明白了,谢谢大家。 所以如果有人遇到和我一样的问题,我就是这样解决的:
在显示搜索结果的页面中,在 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
都保持不变。
我希望代码足够清晰并有所帮助。
当您点击 'Page 2' 时,您不会发送 'year' 和 'month' 数据。
解决方案 1 - 从控制器注入 bills
表单数据
我认为,最简单的方法是将 $request->query->get('bills')
作为 formData
发送到树枝。
在你的树枝上添加 'bills' : formData
在你的路线参数中 bills_paginated
如果你这样做,symfony 会在你的 url 中添加你的表单数据,当你更改页面时你不会丢失它们,所以当你这样做时 $getArgs= $request->query->get('bills');
你有你的数据
解决方案 2 - 从 twig
获取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*>}"