我正在尝试在Symfony中创建一个paginator,这就是我的代码的样子:
控制器类:
class MovieDisplayController extends Controller
{
public function showAction()
{
//Records:
//$movies = $this->getDoctrine()->getEntityManager()->getRepository('AppBundle:Movie')->FindAll();
$em = $this->getDoctrine()->getManager();
$query = $em->createQuery(
'SELECT m
FROM AppBundle:Movie m'
)->setMaxResults(5)->setFirstResult(0);
$movies = $query->getResult();
//$resultAmount = $query->getResult()-count();
//Pagination:
$filterVariables = "";
$currentPage = (isset($_GET['page'])) ? $_GET['page'] : 1;
$totalPages = /*Example: */20; //something like: $this->count($movies) / $recordsPerPage
return $this->render('movies/index.html.twig', array(
'movies' => $movies,
'filtervariables' => $filterVariables,
'page' => $currentPage,
'totalPages' => $totalPages
));
}
}
这段代码非常合适,但是我想让我的paginator工作,我必须在查询的GET
部分传递一些LIMIT
变量(至少这是我之后发现的)做一些搜索)。
首先,让我问你是否有人知道,在{"分页"中使用GET
变量这个课程的一部分,这将是Symfony称之为的正确方法吗?我见过类似:$foo = $request->query->get('page');
的东西,但似乎没有返回任何东西(或者至少与$_GET['page']
变量不一样),或者我正在尝试做一些不可能的事情(不再) ?
(我也不希望为此使用路由)
其次,我想知道是否有可能(或如何)计算使用$movies = $query->getResult()
得到的结果数量。
如果有人有任何提示或建议让我优化我的代码并使其正常工作,我很乐意知道。
编辑:我的分页现在运行正常,如果应该进行任何调整以使其工作更加完美,请随意添加评论或答案,如果这是一个重要的变化。 (Code used)
提前致谢。
答案 0 :(得分:1)
如何将变量传递给控制器有几种可能性。最简单的方法是使用路由。
/**
* @Route("something/{page}/{limit}", defaults={"page" = 1, "limit" = 10}, name="show_action")
*/
public function showAction($page, $limit)
{
}
然后,您就可以直接在控制器中使用$page
和$limit
。
如果您不想使用路由,您也可以使用会话:
public function showAction(Request $request)
{
$this->get('session')->get("page");
$this->get('session')->get("limit");
}
您可以使用DQL计算您的sql记录:
$query = $this->createQueryBuilder()
->from('Movie', 'f')
->getQuery();
$total = $query->select('COUNT(f)')
->getQuery()
->getSingleScalarResult();