class LazyContextRepository
Provides a context repository which uses context provider services.
Hierarchy
- class \Drupal\Core\Plugin\Context\LazyContextRepository implements \Drupal\Core\Plugin\Context\ContextRepositoryInterface
Expanded class hierarchy of LazyContextRepository
2 files declare their use of LazyContextRepository
- BlockLibraryController.php in core/modules/ block/ src/ Controller/ BlockLibraryController.php 
- LazyContextRepositoryTest.php in core/tests/ Drupal/ Tests/ Core/ Plugin/ Context/ LazyContextRepositoryTest.php 
1 string reference to 'LazyContextRepository'
- core.services.yml in core/core.services.yml 
- core/core.services.yml
1 service uses LazyContextRepository
File
- 
              core/lib/ Drupal/ Core/ Plugin/ Context/ LazyContextRepository.php, line 10 
Namespace
Drupal\Core\Plugin\ContextView source
class LazyContextRepository implements ContextRepositoryInterface {
  
  /**
   * The set of available context providers service IDs.
   *
   * @var string[]
   *   Context provider service IDs.
   */
  protected $contextProviderServiceIDs = [];
  
  /**
   * The service container.
   *
   * @var \Symfony\Component\DependencyInjection\ContainerInterface
   */
  protected $container;
  
  /**
   * The statically cached contexts.
   *
   * @var \Drupal\Core\Plugin\Context\ContextInterface[]
   */
  protected $contexts = [];
  
  /**
   * Constructs a LazyContextRepository object.
   *
   * @param \Symfony\Component\DependencyInjection\ContainerInterface $container
   *   The current service container.
   * @param string[] $context_provider_service_ids
   *   The set of the available context provider service IDs.
   */
  public function __construct(ContainerInterface $container, array $context_provider_service_ids) {
    $this->container = $container;
    $this->contextProviderServiceIDs = $context_provider_service_ids;
  }
  
  /**
   * {@inheritdoc}
   */
  public function getRuntimeContexts(array $context_ids) {
    $contexts = [];
    // Create a map of context providers (service IDs) to unqualified context
    // IDs.
    $context_ids_by_service = [];
    foreach ($context_ids as $id) {
      if (isset($this->contexts[$id])) {
        $contexts[$id] = $this->contexts[$id];
        continue;
      }
      assert($id[0] === '@' && str_contains($id, ':'), 'You must provide the context IDs in the @{service_id}:{unqualified_context_id} format.');
      list($service_id, $unqualified_context_id) = explode(':', $id, 2);
      // Remove the leading '@'.
      $service_id = substr($service_id, 1);
      $context_ids_by_service[$service_id][] = $unqualified_context_id;
    }
    // Iterate over all missing context providers (services), gather the
    // runtime contexts and assign them as requested.
    foreach ($context_ids_by_service as $service_id => $unqualified_context_ids) {
      $contexts_by_service = $this->container
        ->get($service_id)
        ->getRuntimeContexts($unqualified_context_ids);
      $wanted_contexts = array_intersect_key($contexts_by_service, array_flip($unqualified_context_ids));
      foreach ($wanted_contexts as $unqualified_context_id => $context) {
        $context_id = '@' . $service_id . ':' . $unqualified_context_id;
        $this->contexts[$context_id] = $contexts[$context_id] = $context;
      }
    }
    return $contexts;
  }
  
  /**
   * {@inheritdoc}
   */
  public function getAvailableContexts() {
    $contexts = [];
    foreach ($this->contextProviderServiceIDs as $service_id) {
      $contexts_by_service = $this->container
        ->get($service_id)
        ->getAvailableContexts();
      foreach ($contexts_by_service as $unqualified_context_id => $context) {
        $context_id = '@' . $service_id . ':' . $unqualified_context_id;
        $contexts[$context_id] = $context;
      }
    }
    return $contexts;
  }
}Members
| Title Sort descending | Modifiers | Object type | Summary | Overriden Title | 
|---|---|---|---|---|
| LazyContextRepository::$container | protected | property | The service container. | |
| LazyContextRepository::$contextProviderServiceIDs | protected | property | The set of available context providers service IDs. | |
| LazyContextRepository::$contexts | protected | property | The statically cached contexts. | |
| LazyContextRepository::getAvailableContexts | public | function | Gets all available contexts for the purposes of configuration. | Overrides ContextRepositoryInterface::getAvailableContexts | 
| LazyContextRepository::getRuntimeContexts | public | function | Gets runtime context values for the given context IDs. | Overrides ContextRepositoryInterface::getRuntimeContexts | 
| LazyContextRepository::__construct | public | function | Constructs a LazyContextRepository object. | 
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.
