Commit 1157cd71 authored by gbyte.co's avatar gbyte.co

Issue #2883763 by rcodina: Rare caching problem for anon users after first sitemap generation

parent 74ef1b10
......@@ -2,12 +2,13 @@
namespace Drupal\simple_sitemap\Controller;
use Drupal\Core\Cache\CacheableResponse;
use Drupal\Core\Controller\ControllerBase;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\HttpFoundation\Response;
use Drupal\Core\Cache\CacheableResponse;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use Drupal\simple_sitemap\Simplesitemap;
use Drupal\Core\PageCache\ResponsePolicy\KillSwitch;
/**
* Class SimplesitemapController
......@@ -16,24 +17,38 @@ use Drupal\simple_sitemap\Simplesitemap;
class SimplesitemapController extends ControllerBase {
/**
* The sitemap generator.
*
* @var \Drupal\simple_sitemap\Simplesitemap
*/
protected $generator;
/**
* @var \Drupal\Core\PageCache\ResponsePolicy\KillSwitch
*/
protected $cacheKillSwitch;
/**
* SimplesitemapController constructor.
*
* @param \Drupal\simple_sitemap\Simplesitemap $generator
* The sitemap generator.
* @param \Drupal\Core\PageCache\ResponsePolicy\KillSwitch $cache_kill_switch
*/
public function __construct(Simplesitemap $generator) {
public function __construct(Simplesitemap $generator, KillSwitch $cache_kill_switch) {
$this->generator = $generator;
$this->cacheKillSwitch = $cache_kill_switch;
}
/**
* {@inheritdoc}
*/
public static function create(ContainerInterface $container) {
return new static(
$container->get('simple_sitemap.generator'),
$container->get('page_cache_kill_switch')
);
}
/**
* Returns the whole sitemap, a requested sitemap chunk, or the sitemap index file.
* Caches the response in case of expected output, prevents caching otherwise.
*
* @param int $chunk_id
* Optional ID of the sitemap chunk. If none provided, the first chunk or
......@@ -47,6 +62,7 @@ class SimplesitemapController extends ControllerBase {
public function getSitemap($chunk_id = NULL) {
$output = $this->generator->getSitemap($chunk_id);
if (!$output) {
$this->cacheKillSwitch->trigger();
throw new NotFoundHttpException();
}
......@@ -55,16 +71,11 @@ class SimplesitemapController extends ControllerBase {
'content-type' => 'application/xml',
'X-Robots-Tag' => 'noindex', // Do not index the sitemap itself.
]);
// Cache output.
$meta_data = $response->getCacheableMetadata();
$meta_data->addCacheTags(['simple_sitemap']);
return $response;
}
/**
* {@inheritdoc}
*/
public static function create(ContainerInterface $container) {
return new static($container->get('simple_sitemap.generator'));
return $response;
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment