Skip to content
Snippets Groups Projects

Allow plugin definition to be aliased

Files
6
@@ -2,6 +2,10 @@
@@ -2,6 +2,10 @@
namespace Drupal\Component\Plugin\Discovery;
namespace Drupal\Component\Plugin\Discovery;
 
use Drupal\Component\Plugin\Definition\DerivablePluginDefinitionInterface;
 
use Drupal\Component\Plugin\Definition\PluginDefinitionInterface;
 
use Drupal\Component\Plugin\Exception\PluginNotFoundException;
 
trait DiscoveryCachedTrait {
trait DiscoveryCachedTrait {
use DiscoveryTrait;
use DiscoveryTrait;
@@ -13,6 +17,8 @@ trait DiscoveryCachedTrait {
@@ -13,6 +17,8 @@ trait DiscoveryCachedTrait {
*/
*/
protected $definitions;
protected $definitions;
 
protected $aliasDefinitions;
 
/**
/**
* {@inheritdoc}
* {@inheritdoc}
*/
*/
@@ -22,7 +28,47 @@ public function getDefinition($plugin_id, $exception_on_invalid = TRUE) {
@@ -22,7 +28,47 @@ public function getDefinition($plugin_id, $exception_on_invalid = TRUE) {
$this->getDefinitions();
$this->getDefinitions();
}
}
return $this->doGetDefinition($this->definitions, $plugin_id, $exception_on_invalid);
try {
 
return $this->doGetDefinition($this->definitions, $plugin_id, TRUE);
 
}
 
catch (PluginNotFoundException $e) {
 
$aliases = $this->getAliasDefinitions();
 
if (isset($aliases[$plugin_id])) {
 
return $this->doGetDefinition($this->definitions, $aliases[$plugin_id], $exception_on_invalid);
 
}
 
 
return $exception_on_invalid ? throw $e : NULL;
 
}
 
}
 
 
public function getAliasDefinitions(): array {
 
if (isset($this->aliasDefinitions)) {
 
return $this->aliasDefinitions;
 
}
 
 
$this->aliasDefinitions = [];
 
 
$definitions = $this->getDefinitions();
 
foreach ($definitions as $id => $definition) {
 
if ($definition instanceof PluginDefinitionInterface) {
 
if ($definition instanceof DerivablePluginDefinitionInterface && $definition->getDeriver()) {
 
continue;
 
}
 
 
$this->aliasDefinitions[$definition->getClass()] = $definition->id();
 
continue;
 
}
 
 
if ($definition['deriver'] ?? FALSE) {
 
continue;
 
}
 
 
if ($definition['class'] ?? FALSE) {
 
$this->aliasDefinitions[$definition['class']] = $definition['id'] ?? $id;
 
}
 
}
 
 
return $this->aliasDefinitions;
}
}
}
}
Loading