Paginator Symfony建议进行查询

时间:2016-02-29 08:44:19

标签: php mysql symfony pagination

我正在尝试在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

提前致谢。

1 个答案:

答案 0 :(得分:1)

symfony中的GET和SET变量

如何将变量传递给控制器​​有几种可能性。最简单的方法是使用路由。

/**
* @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();