digital_signage_framework-2.3.x-dev/src/Controller/BlockApi.php

src/Controller/BlockApi.php
<?php

namespace Drupal\digital_signage_framework\Controller;

use Drupal\Core\DependencyInjection\ContainerInjectionInterface;
use Drupal\Core\Entity\EntityTypeManagerInterface;
use Drupal\Core\Render\RendererInterface;
use Drupal\block\BlockViewBuilder;
use Drupal\block\Entity\Block;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\HttpFoundation\Response;

/**
 * Provides the Block controller.
 */
class BlockApi implements ContainerInjectionInterface {

  /**
   * The core renderer.
   *
   * @var \Drupal\Core\Render\RendererInterface
   */
  protected RendererInterface $renderer;

  /**
   * The block view builder.
   *
   * @var \Drupal\block\BlockViewBuilder
   */
  protected BlockViewBuilder $blockViewBuilder;

  /**
   * Constructs the BlockApi object.
   *
   * @param \Drupal\Core\Entity\EntityTypeManagerInterface $entityTypeManager
   *   The entity type manager.
   * @param \Drupal\Core\Render\RendererInterface $renderer
   *   The core renderer.
   */
  public function __construct(EntityTypeManagerInterface $entityTypeManager, RendererInterface $renderer) {
    $builder = $entityTypeManager->getViewBuilder('block');
    if ($builder instanceof BlockViewBuilder) {
      $this->blockViewBuilder = $builder;
    }
    $this->renderer = $renderer;
  }

  /**
   * {@inheritdoc}
   */
  public static function create(ContainerInterface $container): BlockApi {
    return new BlockApi(
      $container->get('entity_type.manager'),
      $container->get('renderer')
    );
  }

  /**
   * Handles the request.
   *
   * @param string $id
   *   The block ID.
   *
   * @return \Symfony\Component\HttpFoundation\Response
   *   The response.
   */
  public function request(string $id): Response {
    if ($block = Block::load($id)) {
      $build = $this->blockViewBuilder->view($block);
      $build['#cache'] = ['max-age' => 0];
      $content = $this->renderer->renderPlain($build);
    }
    else {
      $content = '';
    }
    return new Response($content);
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc