Drupal 8 - get blocks assigned to a region

Problem: There is no specific function in Drupal 8 which we can use to get all blocks assigned to a region. We used to have a function called block_get_blocks_by_region in Drupal 7 to do this

 

Solution : Although we don't have a specific function we have the tools in Drupal 8 s Object oriented hierarchy to do the same. Here is the code

 

function my_module_get_blocks_by_region($region) {

  $blocks = \Drupal::entityTypeManager()

    ->getStorage('block')->loadByProperties([

      'theme' => \Drupal::theme()->getActiveTheme()->getName(),

      'region' => $region,

    ]);

  uasort($blocks, 'Drupal\block\Entity\Block::sort');

  $build = [];

  foreach ($blocks as $key => $block) {

    if ($block->access('view')) {

      $build[$key] = entity_view($block, 'block');

    }

  }

   return $build;

}