Я использую ajax для фильтрации возвращаемых данных.
В бэкэнде я использую Symfony и KnpPaginatorBundle.
теперь, когда я отображаю данные и нумерацию страниц без фильтра, и это работает, и когда я нажимаю на страницу 2 в пагинации.
Например, он также работает, но когда я фильтрую с помощью ajax, тоже работает, но когда я нажимаю кнопку 2 на пагинации, он переходит на страницу 2 разбиения на страницы без фильтра
Например, если яфильтр с name = "david" возвращенные данные имеют значение true, а отображение - true, но когда я щелкаю страницу 2 для разбивки на страницы, я перехожу на страницу 2 без фильтра (я получаю данные для страницы 2 без фильтра)
code sf:
/**
* @Route({
* "fr": "/list",
* "de": "/list",
* "en": "/list"
* } , options = { "expose" = true } , name="front.babysitter.list", methods={"GET"})
*
* @param Request $request
*/
public function list(Request $request){
$this->urls_intl = $this->getCurrentUrl("front.babysitter.list",[]);
$form = $this->createForm(BabySitterFrontSearchType::class, null);
if(empty($request->query->all())){
$listBabySitters = $this->babySitterRepository->findBy(['status' => 1]);
} else {
$listBabySitters = $this->babySitterRepository->findBabySitter($request->query->get("babysitter_search"));
}
$listBabySittersPaginate = $this->paginator->paginate(
$listBabySitters,
$request->query->get('page', 1),
$this->paginate
);
return $this->render('babysitter/list.html.twig',[
'listBabySitters' => $listBabySittersPaginate,
'form' => $form->createView()
]);
}
хранилище кодов:
public function findBabySitter($searchQuery, $distance = 10): array
{
$query = $this->createQueryBuilder('b')
->where('b.status = 1');
if (isset($searchQuery['spokLanguage']) && $searchQuery['spokLanguage']){
$query
->join('b.spokLanguages','sp')
->andWhere('sp.language in ( :language_id )')
->setParameter('language_id', $searchQuery['spokLanguage'])
;
}
}
//just example for filter
код js:
var searchBabySitters = function(){
$("#ajax-form-search-babysitter").on('submit', function () {
$('.loading').show();
history.pushState(null, null, window.location.href+'?'+$('#ajax-form-search-babysitter').serialize());
$.ajax({
url: Routing.generate("front.babysitter.filter"),
type: "POST",
headers: { "cache-control": "no-cache" },
async: false,
cache: false,
data: $(this).serialize(),
success: function (XMLHttpRequest){
$('.loading').hide();
$('.list').html(XMLHttpRequest);
},
error: function (XMLHttpRequest, textStatus) {
if (textStatus !== 'abort')
{
var error = "TECHNICAL ERROR: unable to send login informations \n\nDetails:\nError thrown: " + XMLHttpRequest + "\n" + 'Text status: ' + textStatus;
$.growl.error({ message: error});
return false;
}
},
complete : function () {
}
});
return false;
})
};