fix api for rendering a single item

This commit is contained in:
Julien Fastré 2021-05-06 12:18:42 +02:00
parent 2b8bbe019d
commit 90fe484d81
3 changed files with 18 additions and 19 deletions

View File

@ -48,18 +48,18 @@ class ApiController extends AbstractCRUDController
return $response; return $response;
} }
$response = $this->onPostCheckACL($action, $request, $entity, $_format); $response = $this->onPostCheckACL($action, $request, $_format, $entity);
if ($response instanceof Response) { if ($response instanceof Response) {
return $response; return $response;
} }
$response = $this->onBeforeSerialize($action, $request, $entity, $_format); $response = $this->onBeforeSerialize($action, $request, $_format, $entity);
if ($response instanceof Response) { if ($response instanceof Response) {
return $response; return $response;
} }
if ($_format === 'json') { if ($_format === 'json') {
$context = $this->getContextForSerialization($action, $request, $entity, $_format); $context = $this->getContextForSerialization($action, $request, $_format, $entity);
return $this->json($entity, Response::HTTP_OK, [], $context); return $this->json($entity, Response::HTTP_OK, [], $context);
} else { } else {
@ -67,7 +67,7 @@ class ApiController extends AbstractCRUDController
} }
} }
public function onBeforeSerialize(string $action, Request $request, $entity, string $_format): ?Response public function onBeforeSerialize(string $action, Request $request, $_format, $entity): ?Response
{ {
return null; return null;
} }
@ -118,15 +118,7 @@ class ApiController extends AbstractCRUDController
* 3. build a query, using `queryEntities` * 3. build a query, using `queryEntities`
* x. fetch the results, using `getQueryResult` * x. fetch the results, using `getQueryResult`
* x. Launch `onPostIndexFetchQuery`. If it does return a response instance, return it * x. Launch `onPostIndexFetchQuery`. If it does return a response instance, return it
* 4. create default parameters: * 4. Serialize the entities in a Collection, using `SerializeCollection`
*
* The default parameters are:
*
* * entities: the list en entities ;
* * crud_name: the name of the crud ;
* * paginator: a paginator element ;
* 5. Launch rendering, the parameter is fetch using `getTemplateFor`
* The parameters may be personnalized using `generateTemplateParameter`.
* *
* @param string $action * @param string $action
* @param Request $request * @param Request $request
@ -178,22 +170,24 @@ class ApiController extends AbstractCRUDController
return $response; return $response;
} }
return $this->serializeCollectionItems($action, $request, $_format, $paginator, $entities); return $this->serializeCollection($action, $request, $_format, $paginator, $entities);
} }
/** /**
* Serialize collections * Serialize collections
* *
*/ */
protected function serializeCollectionItems(string $action, Request $request, string $_format, PaginatorInterface $paginator, $entities): Response protected function serializeCollection(string $action, Request $request, string $_format, PaginatorInterface $paginator, $entities): Response
{ {
$model = new Collection($entities, $paginator); $model = new Collection($entities, $paginator);
return $this->json($model); $context = $this->getContextForSerialization($action, $request, $_format, $entities);
return $this->json($model, Response::HTTP_OK, [], $context);
} }
protected function getContextForSerialization(string $action, Request $request, $entity, $_format): array protected function getContextForSerialization(string $action, Request $request, string $_format, $entity): array
{ {
return []; return [];
} }

View File

@ -22,7 +22,7 @@
namespace Chill\PersonBundle\Entity\AccompanyingPeriod; namespace Chill\PersonBundle\Entity\AccompanyingPeriod;
use Chill\PersonBundle\Entity\AccompanyingPeriod\OriginRepository; use Chill\PersonBundle\Repository\AccompanyingPeriod\OriginRepository;
use Doctrine\ORM\Mapping as ORM; use Doctrine\ORM\Mapping as ORM;
/** /**

View File

@ -23,3 +23,8 @@ services:
arguments: arguments:
- '@Doctrine\Persistence\ManagerRegistry' - '@Doctrine\Persistence\ManagerRegistry'
tags: [ doctrine.repository_service ] tags: [ doctrine.repository_service ]
Chill\PersonBundle\Repository\AccompanyingPeriod\OriginRepository:
arguments:
- '@Doctrine\Persistence\ManagerRegistry'
tags: [ doctrine.repository_service ]