diff --git a/sites/all/modules/figli/edlp_agenda/src/Controller/AgendaController.php b/sites/all/modules/figli/edlp_agenda/src/Controller/AgendaController.php index 14705933d..c3fa722d8 100644 --- a/sites/all/modules/figli/edlp_agenda/src/Controller/AgendaController.php +++ b/sites/all/modules/figli/edlp_agenda/src/Controller/AgendaController.php @@ -5,7 +5,9 @@ namespace Drupal\edlp_agenda\Controller; use Drupal\Core\Controller\ControllerBase; use Drupal\Core\Datetime\DrupalDateTime; use Symfony\Component\HttpFoundation\JsonResponse; - +use Drupal\Core\Cache\CacheableJsonResponse; +use Drupal\Core\Cache\CacheableMetadata; +use Drupal\core\render\RenderContext; class AgendaController extends ControllerBase { @@ -66,16 +68,29 @@ class AgendaController extends ControllerBase { */ public function agendajson() { - $response = new JsonResponse(); $renderable = $this->toRenderable(); - $rendered = render($renderable); + // $rendered = render($renderable); + // We can't render directly the entity as it throw an exception with cachable data + //http://blog.dcycle.com/blog/2018-01-24/caching-drupal-8-rest-resource/#the-dreaded-leaked-metadata-error + $rendered = \Drupal::service('renderer')->executeInRenderContext(new RenderContext(), function () use ($renderable) { + return render($renderable); + }); - $response->setData([ - 'test'=>'hello', + $data = [ 'rendered'=> $rendered - ]); + ]; + + $data['#cache'] = [ + 'max-age' => \Drupal\Core\Cache\Cache::PERMANENT, + 'tags' => ['edlp-agenda-cache'] + ]; + + // $response = new JsonResponse(); + // $response->setData($data); + $response = new CacheableJsonResponse($data); + $response->addCacheableDependency(CacheableMetadata::createFromRenderArray($data)); + $response->addCacheableDependency(CacheableMetadata::createFromRenderArray($renderable)); return $response; } - }