From 5751a8b72aabc9ba9d0e5447c4f5836d22742b6a Mon Sep 17 00:00:00 2001 From: s j <sj@1729.be> Date: Sun, 11 Sep 2022 07:05:31 +0000 Subject: [PATCH 1/2] imp: dynamic page cache policy for json requests --- .../shareholder_register_api.services.yml | 12 ++++- .../src/JsonRequestPolicy.php | 49 +++++++++++++++++++ 2 files changed, 60 insertions(+), 1 deletion(-) create mode 100644 modules/shareholder_register_api/src/JsonRequestPolicy.php diff --git a/modules/shareholder_register_api/shareholder_register_api.services.yml b/modules/shareholder_register_api/shareholder_register_api.services.yml index 2d0fa0a0..8d08bcba 100644 --- a/modules/shareholder_register_api/shareholder_register_api.services.yml +++ b/modules/shareholder_register_api/shareholder_register_api.services.yml @@ -1,4 +1,14 @@ services: + logger.channel.shareholder_register_api: + parent: logger.channel_base + arguments: ['shareholder_register_api'] + shareholder_register.token: class: Drupal\shareholder_register_api\Services\TokenIssuer - arguments: [ '@jwt.transcoder', '@event_dispatcher' ] \ No newline at end of file + arguments: [ '@jwt.transcoder', '@event_dispatcher' ] + + shareholder_register_api.cache_request_policy: + class: 'Drupal\shareholder_register_api\JsonRequestPolicy' + arguments: ['@logger.channel.shareholder_register_api'] + tags: + - { name: dynamic_page_cache_request_policy } \ No newline at end of file diff --git a/modules/shareholder_register_api/src/JsonRequestPolicy.php b/modules/shareholder_register_api/src/JsonRequestPolicy.php new file mode 100644 index 00000000..a8db9228 --- /dev/null +++ b/modules/shareholder_register_api/src/JsonRequestPolicy.php @@ -0,0 +1,49 @@ +<?php + +namespace Drupal\shareholder_register_api; + +use Drupal\Core\PageCache\RequestPolicyInterface; +use Psr\Log\LoggerInterface; +use Symfony\Component\HttpFoundation\Request; + +/** + * Class RequestPolicy. + * + * This request policy will prevent the current page from being cached if it + * is a json format request. + * + * @package Drupal\shareholder_register_api + */ +class JsonRequestPolicy implements RequestPolicyInterface { + + /** + * The logger service. + * + * @var \Psr\Log\LoggerInterface + */ + protected $logger; + + /** + * RequestPolicy constructor. + * + * @param \Psr\Log\LoggerInterface $logger + * The logger service. + */ + public function __construct(LoggerInterface $logger) { + $this->logger = $logger; + } + + /** + * {@inheritdoc} + */ + public function check(Request $request) { + $result = NULL; + + if ($request->query->get('_format') === 'json') { + $result = static::DENY; + } + + return $result; + } + +} -- GitLab From 23c3d45ba8b89aff8031b29ad354b37658492aea Mon Sep 17 00:00:00 2001 From: s j <sj@1729.be> Date: Fri, 16 Sep 2022 07:44:04 +0000 Subject: [PATCH 2/2] imp: deny caching only for route rest.entity.payment.GET --- .../shareholder_register_api.services.yml | 2 +- .../src/JsonRequestPolicy.php | 15 +++++++++++++-- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/modules/shareholder_register_api/shareholder_register_api.services.yml b/modules/shareholder_register_api/shareholder_register_api.services.yml index 8d08bcba..adc217c2 100644 --- a/modules/shareholder_register_api/shareholder_register_api.services.yml +++ b/modules/shareholder_register_api/shareholder_register_api.services.yml @@ -9,6 +9,6 @@ services: shareholder_register_api.cache_request_policy: class: 'Drupal\shareholder_register_api\JsonRequestPolicy' - arguments: ['@logger.channel.shareholder_register_api'] + arguments: ['@logger.channel.shareholder_register_api', '@current_route_match'] tags: - { name: dynamic_page_cache_request_policy } \ No newline at end of file diff --git a/modules/shareholder_register_api/src/JsonRequestPolicy.php b/modules/shareholder_register_api/src/JsonRequestPolicy.php index a8db9228..6ca6e753 100644 --- a/modules/shareholder_register_api/src/JsonRequestPolicy.php +++ b/modules/shareholder_register_api/src/JsonRequestPolicy.php @@ -3,6 +3,7 @@ namespace Drupal\shareholder_register_api; use Drupal\Core\PageCache\RequestPolicyInterface; +use Drupal\Core\Routing\RouteMatchInterface; use Psr\Log\LoggerInterface; use Symfony\Component\HttpFoundation\Request; @@ -23,14 +24,24 @@ class JsonRequestPolicy implements RequestPolicyInterface { */ protected $logger; + /** + * The current route match. + * + * @var \Drupal\Core\Routing\RouteMatchInterface + */ + protected $routeMatch; + /** * RequestPolicy constructor. * * @param \Psr\Log\LoggerInterface $logger * The logger service. + * @param \Drupal\Core\Routing\RouteMatchInterface $route_match + * The current route match. */ - public function __construct(LoggerInterface $logger) { + public function __construct(LoggerInterface $logger, RouteMatchInterface $route_match) { $this->logger = $logger; + $this->routeMatch = $route_match; } /** @@ -39,7 +50,7 @@ class JsonRequestPolicy implements RequestPolicyInterface { public function check(Request $request) { $result = NULL; - if ($request->query->get('_format') === 'json') { + if ($this->routeMatch->getRouteName() === 'rest.entity.payment.GET') { $result = static::DENY; } -- GitLab