У меня проблема с Knp, запросом AJAX и фильтром. Я думаю, что я делаю что-то очень нехорошее здесь, но я не уверен, как именно KnpPaginator работает внутри, и у меня нет времени, чтобы понять это в этом проекте.Symfony2 - KnpPaginator - AJAX/встроенный контроллер
В любом случае, на моей странице встроен контроллер, который отображает таблицу на странице. Когда paginator вызывается из ветки, он возвращает маршрут к странице контейнера, что приводит к тому, что paginator не работает с моими запросами GET на этот uri.
Я не уверен, что кто-либо из вас встретил это - я рад услышать, есть ли лучшее решение проблемы (я уверен, что есть). Вот мой код:
CONTROLLER
/**
* Just a shell page
*
* @Route("/postmanagement/index")
* @Template()
*
* @return array
*/
public function indexAction()
{
$form = $this->createForm(new FilterPostsType(), null, array(
'action' => $this->generateUrl('myblog_admin_postmanagement_filterposts'),
'method' => 'POST'
)
);
return array(
'form' => $form->createView()
);
}
/**
* Returns active posts and comments
*
* @param Request $request
*
* @return array
*/
public function defaultAction(Request $request)
{
$em = $this->getDoctrine()->getManager();
$posts = $em->getRepository('ModelBundle:Post')->findBy(array(
'active' => true
)
);
$paginator = $this->get('knp_paginator');
$pagination = $paginator->paginate($posts, $request->query->get('page', 1), 10);
return $this->render("AdminBundle:PostManagement:_ajax-panel.html.twig", array(
'isPost' => true,
'posts' => $posts,
'pagination' => $pagination
)
);
}
/**
* @param Request $request
*
* @Route("/postmanagement/filter")
*
* @return array
*/
public function filterPostsAction(Request $request)
{
$form = $this->createForm(new FilterPostType(), null, array(
'action' => $this->generateUrl('myblog_admin_postmanagement_filterposts'),
'method' => 'POST'
)
);
// if ($request->isMethod('POST')) {
$posts = null;
$form->handleRequest($request);
$data = $form->getData();
$posts = $this->get('myblog.admin_manager')->filterPosts($data);
switch ($data['type']) {
case 'post':
$isPost = true;
$isComment = false;
break;
case 'comment':
$isPost = false;
$isComment = true;
break;
}
// }
$paginator = $this->get('knp_paginator');
$pagination = $paginator->paginate($posts, $request->query->get('page', 1), $data['maxresults']);
if (is_null($posts)) {
return new NotFoundHttpException();
} else {
return $this->render('AdminBundle:PostManagement:_ajax-panel.html.twig', array(
'posts' => $posts,
'isPost' => $isPost,
'isComment' => $isComment,
'pagination' => $pagination
)
);
}
}
Я не проводка мнения здесь, так как это простой визуализация (контроллер (MyBundle: Контроллер: MyAction)). Как вы можете видеть, есть форма, которую я отправляю на странице, чтобы отфильтровать сообщения. Это также создает проблему, так как кажется, что paginator не сохраняет запрос после того, как я запустил его через фильтр.
Спасибо за помощь! Мне бы очень хотелось, чтобы кто-то сделал это раньше, и придумал лучшее решение, чем мой довольно запутанный (что также связано с слишком большим количеством запросов по моему вкусу).