Commit b793a12b authored by Mat's avatar Mat

Merge branch 'paginate'

Fusionne la branche 'paginate', une fonction de pagination pour afficher les membres de AssoBundle en interrogeant APIBundle sur une page Ajax.
A ce stade, le contoller et le repository font le boulot. TODO Reste à écrire la page AJAX qui affiche les membres avec tri et pagination.
parents efe3bb3b 0bf52e9b
<?php
namespace APIBundle\Controller;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use AssoBundle\Entity\Membre;
class MembreAPIController extends MasterAPIController
{
/**
* @param Request
* @return \Symfony\Component\HttpFoundation\JsonResponse
*/
public function readPaginateAction(Request $request)
{
// defaults
$paginate = ($request->query->get('step') !== null) ? $request->query->get('step') : 10;
$start = ($request->query->get('start') !== null) ? $request->query->get('start') : 1;
$column = ($request->query->get('column') !== null) ? $request->query->get('column') : 'id';
$order = ($request->query->get('order') !== null) ? $request->query->get('order') : 'ASC';
$em = $this->getDoctrine()->getManager();
$membres = $em->getRepository('AssoBundle:Membre')
->findAllForAPIReadPaginate($paginate, $start, $column, $order);
return $this->api($membres);
}
}
...@@ -77,6 +77,16 @@ api_image_delete_one: ...@@ -77,6 +77,16 @@ api_image_delete_one:
requirements: requirements:
id: \d+ id: \d+
methods: [ DELETE ] methods: [ DELETE ]
## MembreAPI
api_membre_read_paginate:
path: /membres/page
defaults:
_controller: APIBundle:MembreAPI:readPaginate
methods: [ GET ]
## ##
## Note: ## Note:
## ##
......
...@@ -2,6 +2,7 @@ ...@@ -2,6 +2,7 @@
namespace AssoBundle\Repository; namespace AssoBundle\Repository;
/** /**
* MembreRepository * MembreRepository
* *
...@@ -75,4 +76,32 @@ class MembreRepository extends \Doctrine\ORM\EntityRepository ...@@ -75,4 +76,32 @@ class MembreRepository extends \Doctrine\ORM\EntityRepository
return $qb->getQuery()->getSingleResult(); return $qb->getQuery()->getSingleResult();
} }
/**
* @param $paginate
* @param $start
* @param $column
* @param $order
* @return Membre[]
*/
public function findAllForAPIReadPaginate($paginate, $start, $column = null, $order = null)
{
$qb = $this->createQueryBuilder('m')
->join('m.association', 'a')
->addSelect('a')
->setMaxResults($paginate)
->setFirstResult(($start - 1) * $paginate);
if ($column !== null) {
$qb ->orderBy(sprintf('m.%s', $column), $order);
// ou plus simplement 'm.' . $column
}
// Toutes ces méthodes du queryBuilder sont déjà sécurisées.
// Concrêtement on utilise le binding de paramètres (:id)
// principalement pour le where.
return $qb->getQuery()->getResult();
}
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment