@@ -30,9 +30,9 @@ class GraphController
30
30
private $ shouldHandleCORS ;
31
31
32
32
/**
33
- * @var string
33
+ * @var bool
34
34
*/
35
- private $ graphQLBatchingMethod ;
35
+ private $ useApolloBatchingMethod ;
36
36
37
37
public function __construct (
38
38
GraphQLRequest \ParserInterface $ batchParser ,
@@ -45,19 +45,38 @@ public function __construct(
45
45
$ this ->requestExecutor = $ requestExecutor ;
46
46
$ this ->requestParser = $ requestParser ;
47
47
$ this ->shouldHandleCORS = $ shouldHandleCORS ;
48
- $ this ->graphQLBatchingMethod = $ graphQLBatchingMethod ;
48
+ $ this ->useApolloBatchingMethod = ' apollo ' == = $ graphQLBatchingMethod ;
49
49
}
50
50
51
+ /**
52
+ * @param Request $request
53
+ * @param string|null $schemaName
54
+ *
55
+ * @return JsonResponse|Response
56
+ */
51
57
public function endpointAction (Request $ request , $ schemaName = null )
52
58
{
53
59
return $ this ->createResponse ($ request , $ schemaName , false );
54
60
}
55
61
62
+ /**
63
+ * @param Request $request
64
+ * @param string|null $schemaName
65
+ *
66
+ * @return JsonResponse|Response
67
+ */
56
68
public function batchEndpointAction (Request $ request , $ schemaName = null )
57
69
{
58
70
return $ this ->createResponse ($ request , $ schemaName , true );
59
71
}
60
72
73
+ /**
74
+ * @param Request $request
75
+ * @param string|null $schemaName
76
+ * @param bool $batched
77
+ *
78
+ * @return JsonResponse|Response
79
+ */
61
80
private function createResponse (Request $ request , $ schemaName , $ batched )
62
81
{
63
82
if ('OPTIONS ' === $ request ->getMethod ()) {
@@ -66,43 +85,73 @@ private function createResponse(Request $request, $schemaName, $batched)
66
85
if (!in_array ($ request ->getMethod (), ['POST ' , 'GET ' ])) {
67
86
return new Response ('' , 405 );
68
87
}
69
-
70
- if ($ batched ) {
71
- $ payload = $ this ->processBatchQuery ($ request , $ schemaName );
72
- } else {
73
- $ payload = $ this ->processNormalQuery ($ request , $ schemaName );
74
- }
75
-
88
+ $ payload = $ this ->processQuery ($ request , $ schemaName , $ batched );
76
89
$ response = new JsonResponse ($ payload , 200 );
77
90
}
91
+ $ this ->addCORSHeadersIfNeeded ($ response , $ request );
78
92
93
+ return $ response ;
94
+ }
95
+
96
+ private function addCORSHeadersIfNeeded (Response $ response , Request $ request )
97
+ {
79
98
if ($ this ->shouldHandleCORS && $ request ->headers ->has ('Origin ' )) {
80
99
$ response ->headers ->set ('Access-Control-Allow-Origin ' , $ request ->headers ->get ('Origin ' ), true );
81
100
$ response ->headers ->set ('Access-Control-Allow-Credentials ' , 'true ' , true );
82
101
$ response ->headers ->set ('Access-Control-Allow-Headers ' , 'Content-Type, Authorization ' , true );
83
102
$ response ->headers ->set ('Access-Control-Allow-Methods ' , 'OPTIONS, GET, POST ' , true );
84
103
$ response ->headers ->set ('Access-Control-Max-Age ' , 3600 , true );
85
104
}
105
+ }
86
106
87
- return $ response ;
107
+ /**
108
+ * @param Request $request
109
+ * @param string|null $schemaName
110
+ * @param bool $batched
111
+ *
112
+ * @return array
113
+ */
114
+ private function processQuery (Request $ request , $ schemaName , $ batched )
115
+ {
116
+ if ($ batched ) {
117
+ $ payload = $ this ->processBatchQuery ($ request , $ schemaName );
118
+ } else {
119
+ $ payload = $ this ->processNormalQuery ($ request , $ schemaName );
120
+ }
121
+
122
+ return $ payload ;
88
123
}
89
124
125
+ /**
126
+ * @param Request $request
127
+ * @param string|null $schemaName
128
+ *
129
+ * @return array
130
+ */
90
131
private function processBatchQuery (Request $ request , $ schemaName = null )
91
132
{
92
133
$ queries = $ this ->batchParser ->parse ($ request );
93
- $ apolloBatching = 'apollo ' === $ this ->graphQLBatchingMethod ;
94
134
$ payloads = [];
95
135
96
136
foreach ($ queries as $ query ) {
97
- $ payloadResult = $ this ->requestExecutor ->execute (
98
- $ schemaName , ['query ' => $ query ['query ' ], 'variables ' => $ query ['variables ' ]]
99
- );
100
- $ payloads [] = $ apolloBatching ? $ payloadResult ->toArray () : ['id ' => $ query ['id ' ], 'payload ' => $ payloadResult ->toArray ()];
137
+ $ payload = $ this ->requestExecutor
138
+ ->execute ($ schemaName , ['query ' => $ query ['query ' ], 'variables ' => $ query ['variables ' ]])
139
+ ->toArray ();
140
+ if (!$ this ->useApolloBatchingMethod ) {
141
+ $ payload = ['id ' => $ query ['id ' ], 'payload ' => $ payload ];
142
+ }
143
+ $ payloads [] = $ payload ;
101
144
}
102
145
103
146
return $ payloads ;
104
147
}
105
148
149
+ /**
150
+ * @param Request $request
151
+ * @param string|null $schemaName
152
+ *
153
+ * @return array
154
+ */
106
155
private function processNormalQuery (Request $ request , $ schemaName = null )
107
156
{
108
157
$ params = $ this ->requestParser ->parse ($ request );
0 commit comments