22
33namespace MattJanssen \ApiResponseBundle \Generator ;
44
5+ use MattJanssen \ApiResponseBundle \Compiler \ApiConfigCompiler ;
56use MattJanssen \ApiResponseBundle \DependencyInjection \Configuration ;
67use MattJanssen \ApiResponseBundle \Factory \SerializerAdapterFactory ;
78use MattJanssen \ApiResponseBundle \Model \ApiResponseErrorModel ;
89use MattJanssen \ApiResponseBundle \Model \ApiResponseResponseModel ;
10+ use Symfony \Component \HttpFoundation \RequestStack ;
911use Symfony \Component \HttpFoundation \Response ;
1012
1113/**
1517 */
1618class ApiResponseGenerator
1719{
20+ /**
21+ * @var RequestStack
22+ */
23+ private $ requestStack ;
24+
25+ /**
26+ * @var ApiConfigCompiler
27+ */
28+ private $ configCompiler ;
29+
1830 /**
1931 * Serializer Adapter Factory
2032 *
@@ -25,11 +37,17 @@ class ApiResponseGenerator
2537 /**
2638 * Constructor
2739 *
40+ * @param RequestStack $requestStack
41+ * @param ApiConfigCompiler $configCompiler
2842 * @param SerializerAdapterFactory $serializerAdapterFactory
2943 */
3044 public function __construct (
45+ RequestStack $ requestStack ,
46+ ApiConfigCompiler $ configCompiler ,
3147 SerializerAdapterFactory $ serializerAdapterFactory
3248 ) {
49+ $ this ->requestStack = $ requestStack ;
50+ $ this ->configCompiler = $ configCompiler ;
3351 $ this ->serializerAdapterFactory = $ serializerAdapterFactory ;
3452 }
3553
@@ -39,8 +57,8 @@ public function __construct(
3957 * Defaults to json_encode serializer.
4058 *
4159 * @param mixed $data
42- * @param int $httpCode
43- * @param array $serializeGroups
60+ * @param int|null $httpCode
61+ * @param string[]|null $serializeGroups
4462 * @param string|null $serializerName Name of serializer to use instead of the default.
4563 *
4664 * @return Response
@@ -52,17 +70,23 @@ public function generateSuccessResponse(
5270 array $ serializeGroups = null ,
5371 $ serializerName = null
5472 ) {
55- // Set defaults.
56- if (null === $ httpCode ) {
73+ if ($ httpCode === null ) {
5774 $ httpCode = Response::HTTP_OK ;
5875 }
5976
60- if (null === $ serializeGroups ) {
61- $ serializeGroups = [];
77+ $ request = $ this ->requestStack ->getMasterRequest ();
78+ $ pathConfig = $ request ? $ this ->configCompiler ->compileApiConfig ($ request ) : null ;
79+
80+ if ($ serializeGroups === null && $ pathConfig !== null ) {
81+ $ serializeGroups = $ pathConfig ->getGroups ();
6282 }
6383
64- if (null === $ serializerName ) {
65- $ serializerName = Configuration::SERIALIZER_JSON_ENCODE ;
84+ if ($ serializerName === null ) {
85+ if ($ pathConfig !== null ) {
86+ $ serializerName = $ pathConfig ->getSerializer ();
87+ } else {
88+ $ serializerName = Configuration::SERIALIZER_JSON_ENCODE ;
89+ }
6690 }
6791
6892 $ serializerAdapter = $ this ->serializerAdapterFactory ->createSerializerAdapter ($ serializerName );
@@ -83,7 +107,7 @@ public function generateSuccessResponse(
83107 * This assumes the json_encode serializer.
84108 *
85109 * @param int $httpCode
86- * @param int $errorCode
110+ * @param string $errorCode
87111 * @param string|null $errorTitle
88112 * @param mixed|null $errorData
89113 *
0 commit comments