mirror of
https://gitlab.com/Chill-Projet/chill-bundles.git
synced 2025-09-02 21:13:57 +00:00
create index action for CRUD
This commit is contained in:
@@ -32,6 +32,7 @@ use Chill\MainBundle\Security\Authorization\AuthorizationHelper;
|
||||
use Symfony\Component\Security\Core\Role\Role;
|
||||
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
|
||||
use Chill\MainBundle\CRUD\Resolver\Resolver;
|
||||
use Chill\MainBundle\Pagination\PaginatorInterface;
|
||||
|
||||
/**
|
||||
*
|
||||
@@ -39,12 +40,6 @@ use Chill\MainBundle\CRUD\Resolver\Resolver;
|
||||
*/
|
||||
class CRUDController extends AbstractController
|
||||
{
|
||||
/**
|
||||
*
|
||||
* @var PaginatorFactory
|
||||
*/
|
||||
protected $paginatorFactory;
|
||||
|
||||
/**
|
||||
* The crud configuration
|
||||
*
|
||||
@@ -59,13 +54,10 @@ class CRUDController extends AbstractController
|
||||
$this->crudConfig = $config;
|
||||
}
|
||||
|
||||
protected function getDefaultOrdering(): array
|
||||
{
|
||||
return $this->orderingOptions();
|
||||
}
|
||||
|
||||
protected function processTemplateParameters($action): array
|
||||
{
|
||||
throw new Exception('is this method used ?');
|
||||
|
||||
$configured = $this->getTemplateParameters($action);
|
||||
|
||||
switch($action) {
|
||||
@@ -89,43 +81,57 @@ class CRUDController extends AbstractController
|
||||
return $result;
|
||||
}
|
||||
|
||||
protected function orderQuery(QueryBuilder $query, Request $request): QueryBuilder
|
||||
protected function orderQuery($action, QueryBuilder $query, Request $request, PaginatorInterface $paginator): QueryBuilder
|
||||
{
|
||||
$defaultOrdering = $this->getDefaultOrdering();
|
||||
|
||||
foreach ($defaultOrdering as $sort => $order) {
|
||||
$query->addOrderBy('e.'.$sort, $order);
|
||||
}
|
||||
|
||||
return $query;
|
||||
}
|
||||
|
||||
public function index(Request $request)
|
||||
{
|
||||
$totalItems = $this->getDoctrine()->getManager()
|
||||
->createQuery("SELECT COUNT(e) FROM ".$this->getEntity()." e")
|
||||
->getSingleScalarResult()
|
||||
;
|
||||
|
||||
$query = $this->getDoctrine()->getManager()
|
||||
->createQueryBuilder()
|
||||
->select('e')
|
||||
->from($this->getEntity(), 'e');
|
||||
|
||||
$this->orderQuery($query, $request);
|
||||
|
||||
$paginator = $this->paginatorFactory->create($totalItems);
|
||||
|
||||
$query->setFirstResult($paginator->getCurrentPage()->getFirstItemNumber())
|
||||
->setMaxResults($paginator->getItemsPerPage())
|
||||
;
|
||||
return $this->indexEntityAction('index', $request);
|
||||
}
|
||||
|
||||
protected function indexEntityAction($action, Request $request)
|
||||
{
|
||||
$totalItems = $this->countEntities($action, $request);
|
||||
$paginator = $this->getPaginatorFactory()->create($totalItems);
|
||||
$query = $this->queryEntities($action, $request, $paginator);
|
||||
|
||||
$entities = $query->getQuery()->getResult();
|
||||
|
||||
return $this->render($this->getTemplate('index'), \array_merge([
|
||||
'entities' => $entities,
|
||||
], $this->processTemplateParameters('index'))
|
||||
);
|
||||
$defaultTemplateParameters = [
|
||||
'entities' => $entities,
|
||||
'crud_name' => $this->getCrudName(),
|
||||
'paginator' => $paginator
|
||||
];
|
||||
|
||||
return $this->render(
|
||||
$this->getTemplateFor($action, $entities, $request),
|
||||
$this->generateTemplateParameter($action, $entities, $request, $defaultTemplateParameters)
|
||||
);
|
||||
}
|
||||
|
||||
protected function queryEntities($action, Request $request, PaginatorInterface $paginator)
|
||||
{
|
||||
$query = $this->getDoctrine()->getManager()
|
||||
->createQueryBuilder()
|
||||
->select('e')
|
||||
->from($this->getEntityClass(), 'e')
|
||||
->setFirstResult($paginator->getCurrentPage()->getFirstItemNumber())
|
||||
->setMaxResults($paginator->getItemsPerPage())
|
||||
;
|
||||
|
||||
$this->orderQuery($action, $query, $request, $paginator);
|
||||
|
||||
return $query;
|
||||
}
|
||||
|
||||
protected function countEntities($action, Request $request)
|
||||
{
|
||||
return $this->getDoctrine()->getManager()
|
||||
->createQuery("SELECT COUNT(e) FROM ".$this->getEntityClass()." e")
|
||||
->getSingleScalarResult()
|
||||
;
|
||||
}
|
||||
|
||||
public function edit(Request $request, $id): Response
|
||||
@@ -393,6 +399,14 @@ class CRUDController extends AbstractController
|
||||
return new $type;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param string $action
|
||||
* @param mixed $entity the entity for the current request, or an array of entities
|
||||
* @param Request $request
|
||||
* @return string
|
||||
* @throws \LogicException
|
||||
*/
|
||||
protected function getTemplateFor($action, $entity, Request $request)
|
||||
{
|
||||
if ($this->hasCustomTemplate($action, $entity, $request)) {
|
||||
|
Reference in New Issue
Block a user