AjaxHomeController.php 3.0 KB

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