function EntityMethodDeriver::getDerivativeDefinitions

Same name and namespace in other branches
  1. 11.x core/lib/Drupal/Core/Config/Action/Plugin/ConfigAction/Deriver/EntityMethodDeriver.php \Drupal\Core\Config\Action\Plugin\ConfigAction\Deriver\EntityMethodDeriver::getDerivativeDefinitions()

Overrides DeriverBase::getDerivativeDefinitions

File

core/lib/Drupal/Core/Config/Action/Plugin/ConfigAction/Deriver/EntityMethodDeriver.php, line 57

Class

EntityMethodDeriver
Derives config action methods from attributed config entity methods.

Namespace

Drupal\Core\Config\Action\Plugin\ConfigAction\Deriver

Code

public function getDerivativeDefinitions($base_plugin_definition) {
  // Scan all the config entity classes for attributes.
  foreach ($this->entityTypeManager
    ->getDefinitions() as $entity_type) {
    if ($entity_type instanceof ConfigEntityTypeInterface) {
      $reflectionClass = new \ReflectionClass($entity_type->getClass());
      while ($reflectionClass) {
        foreach ($reflectionClass->getMethods(\ReflectionMethod::IS_PUBLIC) as $method) {
          // Only process a method if it is declared on the current class.
          // Methods on the parent class will be processed later. This allows
          // for a parent to have an attribute and an overriding class does
          // not need one. For example,
          // \Drupal\layout_builder\Entity\LayoutBuilderEntityViewDisplay::setComponent()
          // and \Drupal\Core\Entity\EntityDisplayBase::setComponent().
          if ($method->getDeclaringClass()
            ->getName() === $reflectionClass->getName()) {
            foreach ($method->getAttributes(ActionMethod::class) as $attribute) {
              $this->processMethod($method, $attribute->newInstance(), $entity_type, $base_plugin_definition);
            }
          }
        }
        $reflectionClass = $reflectionClass->getParentClass();
      }
    }
  }
  return $this->derivatives;
}

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