Files
materio-d9/web/modules/custom/materio_home/src/Controller/AjaxHomeController.php

104 lines
3.1 KiB
PHP

<?php
namespace Drupal\materio_home\Controller;
use Drupal\Core\Controller\ControllerBase;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Drupal\language\ConfigurableLanguageManagerInterface;
use Drupal\Core\Render\RendererInterface;
use Drupal\Core\Entity\EntityTypeManagerInterface;
use Symfony\Component\HttpFoundation\JsonResponse;
use Drupal\Core\Cache\CacheableJsonResponse;
use Drupal\Core\Cache\CacheableMetadata;
use Drupal\Core\Url;
use Drupal\core\render\RenderContext;
/**
* Class AjaxHomeController.
*/
class AjaxHomeController extends ControllerBase {
/**
* Drupal\language\ConfigurableLanguageManagerInterface definition.
*
* @var \Drupal\language\ConfigurableLanguageManagerInterface
*/
protected $languageManager;
/**
* Drupal\Core\Render\RendererInterface definition.
*
* @var \Drupal\Core\Render\RendererInterface
*/
protected $renderer;
/**
* Drupal\Core\Render\RendererInterface definition.
*
* @var \Drupal\Core\Entity\EntityTypeManagerInterface
*/
protected $entityTypeManager;
/**
* Constructs a new AjaxHomeController object.
*/
public function __construct(ConfigurableLanguageManagerInterface $language_manager, RendererInterface $renderer, EntityTypeManagerInterface $entity_type_manager) {
$this->languageManager = $language_manager;
$this->renderer = $renderer;
$this->entityTypeManager = $entity_type_manager;
}
/**
* {@inheritdoc}
*/
public static function create(ContainerInterface $container) {
return new static(
$container->get('language_manager'),
$container->get('renderer'),
$container->get('entity_type.manager')
);
}
/**
* Hello.
*
* @return string
* Return Hello string.
*/
public function getHome() {
// $path = \Drupal::config('system.site')->get('page.front');
// $params = Url::fromUri("internal:" . $path)->getRouteParameters();
// $entity_type = key($params);
// $entity = $this->entityTypeManager()->getStorage($entity_type)->load($params[$entity_type]);
$nid = 1;
// TODO: home nid should be a setting
$node_storage = \Drupal::entityTypeManager()->getStorage('node');
$node = $node_storage->load($nid);
$view_builder = $this->entityTypeManager()->getViewBuilder('node');
$renderable = $view_builder->view($node, 'home_full');
$rendered = $this->renderer->executeInRenderContext(new RenderContext(), function () use ($renderable) {
// return render($renderable);
return \Drupal::service('renderer')->render($renderable);
});
$data['rendered'] = $rendered;
$data['#cache'] = [
'max-age' => \Drupal\Core\Cache\Cache::PERMANENT,
'tags' => ['materio-home-cache'],
'contexts' => [
'languages:language_content'
]
];
$response = new JsonResponse();
$response->setData($data);
// $response = new CacheableJsonResponse($data);
// $response->addCacheableDependency(CacheableMetadata::createFromRenderArray($data));
// $response->addCacheableDependency(CacheableMetadata::createFromRenderArray($renderable));
return $response;
}
}