/** * @Route("/", name="fortune_list", defaults={"orderBy"=null}) * @Route("/top", name="fortune_list_top", defaults={"orderBy"="votes_desc"}) * @Route("/flop", name="fortune_list_flop", defaults={"orderBy"="votes_asc"}) */ public function indexAction(Request $request) { $qb = $this->getDoctrine()->getRepository('LyrixxFortuneBundle:Fortune')->createQueryWithSearch(Search::createFromRequest($request)); $pager = new Pagerfanta(new DoctrineORMAdapter($qb)); try { $pager->setCurrentPage($request->query->getInt('page', 1)); } catch (OutOfRangeCurrentPageException $e) { throw $this->createNotFoundException($e->getMessage()); } return ['pager' => $pager]; }
public function createQueryWithSearch(Search $search) { $qb = $this->createQueryBuilder('f'); if ('votes_desc' == $search->orderBy()) { $qb->orderBy('f.votes', 'DESC'); } elseif ('votes_asc' == $search->orderBy()) { $qb->orderBy('f.votes', 'ASC'); } if ($search->search()) { $qb->andWhere('f.quotes like :author'); if ($search->exactMatching()) { $qb->setParameter('author', sprintf('%%<%s>%%', $search->search())); } else { $qb->setParameter('author', sprintf('%%%s%%', $search->search())); } } return $qb->addOrderBy('f.createdAt', 'DESC'); }