diff --git a/spec/ResponseTagger/Delegator/ViewParametersTaggerSpec.php b/spec/ResponseTagger/Delegator/ViewParametersTaggerSpec.php new file mode 100644 index 00000000..3961228b --- /dev/null +++ b/spec/ResponseTagger/Delegator/ViewParametersTaggerSpec.php @@ -0,0 +1,49 @@ +beConstructedWith($dispatcherTagger); + } + + function it_is_initializable() + { + $this->shouldHaveType(ViewParametersTagger::class); + } + + function it_delegates_tagging_of_parameters_that_are_value_objects( + ResponseCacheConfigurator $configurator, + Response $response, + ResponseTagger $dispatcherTagger, + View $view, + ValueObject $someValueObject, + stdClass $someObject + ) { + $view->getParameters()->willReturn([ + 'value_object' => $someValueObject, + 'object' => $someObject, + 'string' => 'some_string', + 'array' => ['a', 'b', 'c'], + ]); + + $this->tag($configurator, $response, $view); + + $dispatcherTagger->tag($configurator, $response, $someValueObject)->shouldHaveBeenCalled(); + $dispatcherTagger->tag($configurator, $response, $someObject)->shouldNotHaveBeenCalled(); + $dispatcherTagger->tag($configurator, $response, 'some_string')->shouldNotHaveBeenCalled(); + $dispatcherTagger->tag($configurator, $response, ['a', 'b', 'c'])->shouldNotHaveBeenCalled(); + } +} diff --git a/src/Resources/config/view_cache.yml b/src/Resources/config/view_cache.yml index ee392b30..de4be26e 100644 --- a/src/Resources/config/view_cache.yml +++ b/src/Resources/config/view_cache.yml @@ -39,6 +39,12 @@ services: tags: - {name: ezplatform.cache_response_tagger} + ezplatform.view_cache.response_tagger.view_parameters: + class: EzSystems\PlatformHttpCacheBundle\ResponseTagger\Delegator\ViewParametersTagger + arguments: ['@ezplatform.view_cache.response_tagger.dispatcher'] + tags: + - {name: ezplatform.cache_response_tagger} + ezplatform.view_cache.response_tagger.content_info: class: EzSystems\PlatformHttpCacheBundle\ResponseTagger\Value\ContentInfoTagger tags: diff --git a/src/ResponseTagger/Delegator/DispatcherTagger.php b/src/ResponseTagger/Delegator/DispatcherTagger.php index 62a93425..5afed4f9 100644 --- a/src/ResponseTagger/Delegator/DispatcherTagger.php +++ b/src/ResponseTagger/Delegator/DispatcherTagger.php @@ -26,5 +26,7 @@ public function tag(ResponseCacheConfigurator $configurator, Response $response, foreach ($this->taggers as $tagger) { $tagger->tag($configurator, $response, $value); } + + return $this; } } diff --git a/src/ResponseTagger/Delegator/ViewParametersTagger.php b/src/ResponseTagger/Delegator/ViewParametersTagger.php new file mode 100644 index 00000000..b2f9b384 --- /dev/null +++ b/src/ResponseTagger/Delegator/ViewParametersTagger.php @@ -0,0 +1,42 @@ +dispatcherTagger = $dispatcherTagger; + } + + public function tag(ResponseCacheConfigurator $configurator, Response $response, $view) + { + if (!$view instanceof View) { + return $this; + } + + foreach ($view->getParameters() as $parameter) { + if (!$parameter instanceof ValueObject) { + continue; + } + + $this->dispatcherTagger->tag($configurator, $response, $parameter); + } + + return $this; + } +} diff --git a/src/ResponseTagger/Value/ContentInfoTagger.php b/src/ResponseTagger/Value/ContentInfoTagger.php index 9f2bef11..bae5e7c6 100644 --- a/src/ResponseTagger/Value/ContentInfoTagger.php +++ b/src/ResponseTagger/Value/ContentInfoTagger.php @@ -23,5 +23,7 @@ public function tag(ResponseCacheConfigurator $configurator, Response $response, if ($value->mainLocationId) { $configurator->addTags($response, ['location-' . $value->mainLocationId]); } + + return $this; } }