From d4855ebb27af3cff12bfb725aa9f4520aaea7bbb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Burnichon?= Date: Wed, 18 May 2016 11:41:46 +0200 Subject: [PATCH] Add TraceableArraySerializer to be able to debug calls --- .../Phrasea/Controller/Api/V1Controller.php | 6 +- .../Phrasea/Fractal/GetSerializationEvent.php | 53 ++++++++++++++++ .../Fractal/TraceableArraySerializer.php | 63 +++++++++++++++++++ 3 files changed, 120 insertions(+), 2 deletions(-) create mode 100644 lib/Alchemy/Phrasea/Fractal/GetSerializationEvent.php create mode 100644 lib/Alchemy/Phrasea/Fractal/TraceableArraySerializer.php diff --git a/lib/Alchemy/Phrasea/Controller/Api/V1Controller.php b/lib/Alchemy/Phrasea/Controller/Api/V1Controller.php index 8d98033337..c80a3e563c 100644 --- a/lib/Alchemy/Phrasea/Controller/Api/V1Controller.php +++ b/lib/Alchemy/Phrasea/Controller/Api/V1Controller.php @@ -37,6 +37,7 @@ use Alchemy\Phrasea\Fractal\ArraySerializer; use Alchemy\Phrasea\Fractal\CallbackTransformer; use Alchemy\Phrasea\Fractal\IncludeResolver; use Alchemy\Phrasea\Fractal\SearchResultTransformerResolver; +use Alchemy\Phrasea\Fractal\TraceableArraySerializer; use Alchemy\Phrasea\Model\Entities\ApiOauthToken; use Alchemy\Phrasea\Model\Entities\Basket; use Alchemy\Phrasea\Model\Entities\BasketElement; @@ -1087,11 +1088,12 @@ class V1Controller extends Controller $includeResolver = new IncludeResolver($transformerResolver); $fractal = new \League\Fractal\Manager(); - $fractal->setSerializer(new ArraySerializer()); + $fractal->setSerializer(new TraceableArraySerializer($this->app['dispatcher'])); $fractal->parseIncludes($this->resolveSearchIncludes($request)); + $result = $this->doSearch($request); $searchView = $this->buildSearchView( - $this->doSearch($request), + $result, $includeResolver->resolve($fractal), $this->resolveSubdefUrlTTL($request) ); diff --git a/lib/Alchemy/Phrasea/Fractal/GetSerializationEvent.php b/lib/Alchemy/Phrasea/Fractal/GetSerializationEvent.php new file mode 100644 index 0000000000..d1f7c1194f --- /dev/null +++ b/lib/Alchemy/Phrasea/Fractal/GetSerializationEvent.php @@ -0,0 +1,53 @@ +resourceKey = $resourceKey; + $this->data = $data; + } + + /** + * @return mixed + */ + public function getResourceKey() + { + return $this->resourceKey; + } + + /** + * @return mixed + */ + public function getData() + { + return $this->data; + } + + public function setSerialization($serialization) + { + $this->serialization = $serialization; + $this->stopPropagation(); + } + + public function getSerialization() + { + return $this->serialization; + } +} diff --git a/lib/Alchemy/Phrasea/Fractal/TraceableArraySerializer.php b/lib/Alchemy/Phrasea/Fractal/TraceableArraySerializer.php new file mode 100644 index 0000000000..8e35f1bdf5 --- /dev/null +++ b/lib/Alchemy/Phrasea/Fractal/TraceableArraySerializer.php @@ -0,0 +1,63 @@ +dispatcher = $dispatcher; + } + + public function collection($resourceKey, array $data) + { + /** @var GetSerializationEvent $event */ + $event = $this->dispatcher->dispatch('fractal.serializer.collection', new GetSerializationEvent($resourceKey, $data)); + + $serialization = parent::collection($resourceKey, $data); + + $event->setSerialization($serialization); + + return $serialization; + } + + public function item($resourceKey, array $data) + { + /** @var GetSerializationEvent $event */ + $event = $this->dispatcher->dispatch('fractal.serializer.item', new GetSerializationEvent($resourceKey, $data)); + + $serialization = parent::item($resourceKey, $data); + + $event->setSerialization($serialization); + + return $serialization; + } + + public function null($resourceKey) + { + /** @var GetSerializationEvent $event */ + $event = $this->dispatcher->dispatch('fractal.serializer.null', new GetSerializationEvent($resourceKey, null)); + + $serialization = parent::null($resourceKey); + + $event->setSerialization($serialization); + + return $serialization; + } + +}