AjaxHomeController.php 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. <?php
  2. namespace Drupal\materio_home\Controller;
  3. use Drupal\Core\Controller\ControllerBase;
  4. use Symfony\Component\DependencyInjection\ContainerInterface;
  5. use Drupal\Core\Entity\EntityManagerInterface;
  6. use Drupal\language\ConfigurableLanguageManagerInterface;
  7. use Drupal\Core\Render\RendererInterface;
  8. use Drupal\Core\Entity\EntityTypeManagerInterface;
  9. use Symfony\Component\HttpFoundation\JsonResponse;
  10. use Drupal\Core\Cache\CacheableJsonResponse;
  11. use Drupal\Core\Cache\CacheableMetadata;
  12. use Drupal\Core\Url;
  13. use Drupal\core\render\RenderContext;
  14. /**
  15. * Class AjaxHomeController.
  16. */
  17. class AjaxHomeController extends ControllerBase {
  18. /**
  19. * Drupal\Core\Entity\EntityManagerInterface definition.
  20. *
  21. * @var \Drupal\Core\Entity\EntityManagerInterface
  22. */
  23. protected $entityManager;
  24. /**
  25. * Drupal\language\ConfigurableLanguageManagerInterface definition.
  26. *
  27. * @var \Drupal\language\ConfigurableLanguageManagerInterface
  28. */
  29. protected $languageManager;
  30. /**
  31. * Drupal\Core\Render\RendererInterface definition.
  32. *
  33. * @var \Drupal\Core\Render\RendererInterface
  34. */
  35. protected $renderer;
  36. /**
  37. * Drupal\Core\Render\RendererInterface definition.
  38. *
  39. * @var \Drupal\Core\Entity\EntityTypeManagerInterface
  40. */
  41. protected $entityTypeManager;
  42. /**
  43. * Constructs a new AjaxHomeController object.
  44. */
  45. public function __construct(EntityManagerInterface $entity_manager, ConfigurableLanguageManagerInterface $language_manager, RendererInterface $renderer, EntityTypeManagerInterface $entity_type_manager) {
  46. $this->entityManager = $entity_manager;
  47. $this->languageManager = $language_manager;
  48. $this->renderer = $renderer;
  49. $this->entityTypeManager = $entity_type_manager;
  50. }
  51. /**
  52. * {@inheritdoc}
  53. */
  54. public static function create(ContainerInterface $container) {
  55. return new static(
  56. $container->get('entity.manager'),
  57. $container->get('language_manager'),
  58. $container->get('renderer'),
  59. $container->get('entity_type.manager')
  60. );
  61. }
  62. /**
  63. * Hello.
  64. *
  65. * @return string
  66. * Return Hello string.
  67. */
  68. public function getHome() {
  69. $path = \Drupal::config('system.site')->get('page.front');
  70. $params = Url::fromUri("internal:" . $path)->getRouteParameters();
  71. $entity_type = key($params);
  72. $entity = $this->entityTypeManager()->getStorage($entity_type)->load($params[$entity_type]);
  73. $view_builder = $this->entityTypeManager()->getViewBuilder('node');
  74. $renderable = $view_builder->view($entity, 'default');
  75. $rendered = $this->renderer->executeInRenderContext(new RenderContext(), function () use ($renderable) {
  76. return render($renderable);
  77. });
  78. $data['rendered'] = $rendered;
  79. $data['#cache'] = [
  80. 'max-age' => \Drupal\Core\Cache\Cache::PERMANENT,
  81. 'tags' => ['materio-home-cache'],
  82. 'contexts' => [
  83. 'languages:language_content'
  84. ]
  85. ];
  86. $response = new JsonResponse();
  87. $response->setData($data);
  88. // $response = new CacheableJsonResponse($data);
  89. // $response->addCacheableDependency(CacheableMetadata::createFromRenderArray($data));
  90. // $response->addCacheableDependency(CacheableMetadata::createFromRenderArray($renderable));
  91. return $response;
  92. }
  93. }