core/modules/block/src/BlockViewBuilder.php | 45 +++++++++++++++++++++++++++-- 1 file changed, 42 insertions(+), 3 deletions(-) diff --git a/core/modules/block/src/BlockViewBuilder.php b/core/modules/block/src/BlockViewBuilder.php index daad7a5..990bc0f 100644 --- a/core/modules/block/src/BlockViewBuilder.php +++ b/core/modules/block/src/BlockViewBuilder.php @@ -12,10 +12,14 @@ use Drupal\Core\Block\StatefulBlockPluginInterface; use Drupal\Core\Cache\Cache; use Drupal\Core\Cache\CacheableMetadata; +use Drupal\Core\Entity\EntityManagerInterface; +use Drupal\Core\Entity\EntityTypeInterface; use Drupal\Core\Entity\EntityViewBuilder; use Drupal\Core\Entity\EntityInterface; use Drupal\Core\Extension\ModuleHandlerInterface; +use Drupal\Core\Language\LanguageManagerInterface; use Drupal\Core\Render\Element; +use Symfony\Component\DependencyInjection\ContainerInterface; /** * Provides a Block view builder. @@ -23,6 +27,42 @@ class BlockViewBuilder extends EntityViewBuilder { /** + * The module handler. + * + * @var \Drupal\Core\Extension\ModuleHandlerInterface + */ + protected $moduleHandler; + + /** + * Constructs a new BlockViewBuilder. + * + * @param \Drupal\Core\Entity\EntityTypeInterface $entity_type + * The entity type definition. + * @param \Drupal\Core\Entity\EntityManagerInterface $entity_manager + * The entity manager service. + * @param \Drupal\Core\Language\LanguageManagerInterface $language_manager + * The language manager. + * @param \Drupal\Core\Extension\ModuleHandlerInterface $module_handler + * The module handler. + */ + public function __construct(EntityTypeInterface $entity_type, EntityManagerInterface $entity_manager, LanguageManagerInterface $language_manager, ModuleHandlerInterface $module_handler) { + parent::__construct($entity_type, $entity_manager, $language_manager); + $this->moduleHandler = $module_handler; + } + + /** + * {@inheritdoc} + */ + public static function createInstance(ContainerInterface $container, EntityTypeInterface $entity_type) { + return new static( + $entity_type, + $container->get('entity.manager'), + $container->get('language_manager'), + $container->get('module_handler') + ); + } + + /** * {@inheritdoc} */ public function buildComponents(array &$build, array $entities, array $displays, $view_mode, $langcode = NULL) { @@ -40,7 +80,6 @@ public function view(EntityInterface $entity, $view_mode = 'full', $langcode = N * {@inheritdoc} */ public function viewMultiple(array $entities = array(), $view_mode = 'full', $langcode = NULL) { - $module_handler = \Drupal::service('module_handler'); /** @var \Drupal\block\BlockInterface[] $entities */ $build = array(); foreach ($entities as $entity) { @@ -65,7 +104,7 @@ public function viewMultiple(array $entities = array(), $view_mode = 'full', $la ); // Allow altering of cacheability metadata or setting #create_placeholder. - $module_handler->alter(['block_build', "block_build_" . $plugin->getBaseId()], $build[$entity_id], $plugin); + $this->moduleHandler->alter(['block_build', "block_build_" . $plugin->getBaseId()], $build[$entity_id], $plugin); if ($plugin instanceof StatefulBlockPluginInterface) { // Immediately build a #pre_render-able block, since this block cannot @@ -149,7 +188,7 @@ protected static function buildPreRenderableBlock($entity, ModuleHandlerInterfac * A render array with a #pre_render callback to render the block. */ public static function lazyBuilder($entity_id, $view_mode, $langcode) { - return static::buildPreRenderableBlock(Block::load($entity_id), \Drupal::service('module_handler')); + return static::buildPreRenderableBlock(entity_load('block', $entity_id), \Drupal::service('module_handler')); } /**