fix api for rendering a single item

This commit is contained in:
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;
}
$response = $this->onPostCheckACL($action, $request, $entity, $_format);
$response = $this->onPostCheckACL($action, $request, $_format, $entity);
if ($response instanceof Response) {
return $response;
}
$response = $this->onBeforeSerialize($action, $request, $entity, $_format);
$response = $this->onBeforeSerialize($action, $request, $_format, $entity);
if ($response instanceof Response) {
return $response;
}
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);
} 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;
}
@@ -118,15 +118,7 @@ class ApiController extends AbstractCRUDController
* 3. build a query, using `queryEntities`
* x. fetch the results, using `getQueryResult`
* x. Launch `onPostIndexFetchQuery`. If it does return a response instance, return it
* 4. create default parameters:
*
* 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`.
* 4. Serialize the entities in a Collection, using `SerializeCollection`
*
* @param string $action
* @param Request $request
@@ -178,22 +170,24 @@ class ApiController extends AbstractCRUDController
return $response;
}
return $this->serializeCollectionItems($action, $request, $_format, $paginator, $entities);
return $this->serializeCollection($action, $request, $_format, $paginator, $entities);
}
/**
* 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 [];
}