made cachable edlp_agenda home
This commit is contained in:
@@ -5,7 +5,9 @@ namespace Drupal\edlp_agenda\Controller;
|
|||||||
use Drupal\Core\Controller\ControllerBase;
|
use Drupal\Core\Controller\ControllerBase;
|
||||||
use Drupal\Core\Datetime\DrupalDateTime;
|
use Drupal\Core\Datetime\DrupalDateTime;
|
||||||
use Symfony\Component\HttpFoundation\JsonResponse;
|
use Symfony\Component\HttpFoundation\JsonResponse;
|
||||||
|
use Drupal\Core\Cache\CacheableJsonResponse;
|
||||||
|
use Drupal\Core\Cache\CacheableMetadata;
|
||||||
|
use Drupal\core\render\RenderContext;
|
||||||
|
|
||||||
class AgendaController extends ControllerBase {
|
class AgendaController extends ControllerBase {
|
||||||
|
|
||||||
@@ -66,16 +68,29 @@ class AgendaController extends ControllerBase {
|
|||||||
*/
|
*/
|
||||||
public function agendajson() {
|
public function agendajson() {
|
||||||
|
|
||||||
$response = new JsonResponse();
|
|
||||||
$renderable = $this->toRenderable();
|
$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([
|
$data = [
|
||||||
'test'=>'hello',
|
|
||||||
'rendered'=> $rendered
|
'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;
|
return $response;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user