InfoHookDecorator.php

Same filename and directory in other branches
  1. 9 core/lib/Drupal/Core/Plugin/Discovery/InfoHookDecorator.php
  2. 10 core/lib/Drupal/Core/Plugin/Discovery/InfoHookDecorator.php
  3. 11.x core/lib/Drupal/Core/Plugin/Discovery/InfoHookDecorator.php

Namespace

Drupal\Core\Plugin\Discovery

File

core/lib/Drupal/Core/Plugin/Discovery/InfoHookDecorator.php

View source
<?php

namespace Drupal\Core\Plugin\Discovery;

use Drupal\Component\Plugin\Discovery\DiscoveryInterface;
use Drupal\Component\Plugin\Discovery\DiscoveryTrait;

/**
 * Allows info hook implementations to enhance discovered plugin definitions.
 */
class InfoHookDecorator implements DiscoveryInterface {
    use DiscoveryTrait;
    
    /**
     * The Discovery object being decorated.
     *
     * @var \Drupal\Component\Plugin\Discovery\DiscoveryInterface
     */
    protected $decorated;
    
    /**
     * The name of the info hook that will be implemented by this discovery instance.
     *
     * @var string
     */
    protected $hook;
    
    /**
     * Constructs a InfoHookDecorator object.
     *
     * @param \Drupal\Component\Plugin\Discovery\DiscoveryInterface $decorated
     *   The object implementing DiscoveryInterface that is being decorated.
     * @param string $hook
     *   The name of the info hook to be invoked by this discovery instance.
     */
    public function __construct(DiscoveryInterface $decorated, $hook) {
        $this->decorated = $decorated;
        $this->hook = $hook;
    }
    
    /**
     * {@inheritdoc}
     */
    public function getDefinitions() {
        $definitions = $this->decorated
            ->getDefinitions();
        foreach (\Drupal::moduleHandler()->getImplementations($this->hook) as $module) {
            $function = $module . '_' . $this->hook;
            $function($definitions);
        }
        return $definitions;
    }
    
    /**
     * Passes through all unknown calls onto the decorated object.
     */
    public function __call($method, $args) {
        return call_user_func_array([
            $this->decorated,
            $method,
        ], $args);
    }

}

Classes

Title Deprecated Summary
InfoHookDecorator Allows info hook implementations to enhance discovered plugin definitions.

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.