i have an app, which displays a list of items, in the main page i have add form with two inputs, the first will contain the month value and the second one will take a year value; i set up the action inside the controller in that action there is a function that take two arguments "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 ,
]);
}
when i submit the search form, the result is being displayed as its expected, the page pagination is there too, but when i click the next page for example page '2'
and that happens because the $getArgs is empty
is there a way to keep the same arguments while changing the page.
Thank you :)
When you click on 'Page 2' you don't send 'year' and 'month' data.
Solution 1 - inject
billsform data from controllerI think, the easiest way is to send the
$request->query->get('bills')to the twig asformDatafor example. And on your twig add the'bills' : formDatain the parameters of your routebills_paginatedIf you do this, symfony will add your form data in your url and you will not lose them when you change your page, so when you do
$getArgs= $request->query->get('bills');you have your dataSolution 2 - get
billsform data from twigThis is easiest solution, get the bills form data directly in twig like this :
{% set formData = app.request.get('bills') %}. And on your twig add the'bills' : formDatain the parameters of your routebills_paginatedBest solution
IMO the best and the cleanest solution is to have a route with the year and month inside like this
"/bills/year/{year<[1-9]\d*>}/month/{month<[1-9]\d*>}/page/{page<[1-9]\d*>}"