1313
1414use Psr \Container \ContainerInterface ;
1515use Symfony \Component \EventDispatcher \EventSubscriberInterface ;
16+ use Symfony \Component \HttpFoundation \Exception \JsonException ;
1617use Symfony \Component \HttpFoundation \Request ;
1718use Symfony \Component \HttpFoundation \Response ;
1819use Symfony \Component \HttpKernel \Event \ControllerEvent ;
@@ -198,16 +199,18 @@ public function onKernelController(ControllerEvent $event): void
198199 * data: array,
199200 * args: array,
200201 * actions: array
202+ * childrenFingerprints: array
201203 * }
202204 */
203- private function parseDataFor (Request $ request ): array
205+ private static function parseDataFor (Request $ request ): array
204206 {
205207 if (!$ request ->attributes ->has ('_live_request_data ' )) {
206208 if ($ request ->query ->has ('data ' )) {
207209 $ liveRequestData = [
208- 'data ' => json_decode ($ request-> query -> get ( 'data ' ), true , 512 , \ JSON_THROW_ON_ERROR ),
210+ 'data ' => self :: parseJsonFromQuery ($ request, 'data ' ),
209211 'args ' => [],
210212 'actions ' => [],
213+ 'childrenFingerprints ' => self ::parseJsonFromQuery ($ request , 'childrenFingerprints ' ),
211214 ];
212215 } else {
213216 $ requestData = $ request ->toArray ();
@@ -216,6 +219,7 @@ private function parseDataFor(Request $request): array
216219 'data ' => $ requestData ['data ' ] ?? [],
217220 'args ' => $ requestData ['args ' ] ?? [],
218221 'actions ' => $ requestData ['actions ' ] ?? [],
222+ 'childrenFingerprints ' => $ requestData ['childrenFingerprints ' ] ?? []
219223 ];
220224 }
221225
@@ -322,6 +326,21 @@ private function hydrateComponent(object $component, string $componentName, Requ
322326 $ componentName
323327 );
324328
329+ $ mountedComponent ->addExtraMetadata ('childrenFingerprints ' , $ this ->parseDataFor ($ request )['childrenFingerprints ' ]);
330+
325331 return $ mountedComponent ;
326332 }
333+
334+ private static function parseJsonFromQuery (Request $ request , string $ key ): array
335+ {
336+ if (!$ request ->query ->has ($ key )) {
337+ return [];
338+ }
339+
340+ try {
341+ return json_decode ($ request ->query ->get ($ key ), true , 512 , \JSON_THROW_ON_ERROR );
342+ } catch (\JsonException $ exception ) {
343+ throw new JsonException (sprintf ('Invalid JSON on query string %s. ' , $ key ), 0 , $ exception );
344+ }
345+ }
327346}
0 commit comments