function DefaultSelectionDeriver::getDerivativeDefinitions

Same name and namespace in other branches
  1. 9 core/lib/Drupal/Core/Entity/Plugin/Derivative/DefaultSelectionDeriver.php \Drupal\Core\Entity\Plugin\Derivative\DefaultSelectionDeriver::getDerivativeDefinitions()
  2. 8.9.x core/lib/Drupal/Core/Entity/Plugin/Derivative/DefaultSelectionDeriver.php \Drupal\Core\Entity\Plugin\Derivative\DefaultSelectionDeriver::getDerivativeDefinitions()
  3. 10 core/lib/Drupal/Core/Entity/Plugin/Derivative/DefaultSelectionDeriver.php \Drupal\Core\Entity\Plugin\Derivative\DefaultSelectionDeriver::getDerivativeDefinitions()

Overrides DeriverBase::getDerivativeDefinitions

File

core/lib/Drupal/Core/Entity/Plugin/Derivative/DefaultSelectionDeriver.php, line 52

Class

DefaultSelectionDeriver
Provides derivative plugins for the DefaultSelection plugin.

Namespace

Drupal\Core\Entity\Plugin\Derivative

Code

public function getDerivativeDefinitions($base_plugin_definition) {
    foreach ($this->entityTypeManager
        ->getDefinitions() as $entity_type_id => $entity_type) {
        $this->derivatives[$entity_type_id] = $base_plugin_definition;
        $this->derivatives[$entity_type_id]['entity_types'] = [
            $entity_type_id,
        ];
        $this->derivatives[$entity_type_id]['label'] = $this->t('@entity_type selection', [
            '@entity_type' => $entity_type->getLabel(),
        ]);
        $this->derivatives[$entity_type_id]['base_plugin_label'] = (string) $base_plugin_definition['label'];
        // If the entity type doesn't provide a 'label' key in its plugin
        // definition, we have to use the alternate PhpSelection class as default
        // plugin, which allows filtering the target entities by their label()
        // method. The major downside of PhpSelection is that it is more expensive
        // performance-wise than DefaultSelection because it has to load all the
        // target entities in order to perform the filtering process, regardless
        // of whether a limit has been passed.
        // @see \Drupal\Core\Entity\Plugin\EntityReferenceSelection\PhpSelection
        if (!$entity_type->hasKey('label')) {
            $this->derivatives[$entity_type_id]['class'] = 'Drupal\\Core\\Entity\\Plugin\\EntityReferenceSelection\\PhpSelection';
        }
    }
    return parent::getDerivativeDefinitions($base_plugin_definition);
}

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