ExtensionListTrait.php 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. <?php
  2. namespace Drupal\Core\Installer;
  3. /**
  4. * Provides common functionality for the extension list classes.
  5. */
  6. trait ExtensionListTrait {
  7. /**
  8. * Static version of the added file names during the installer.
  9. *
  10. * @var string[]
  11. *
  12. * @internal
  13. */
  14. protected static $staticAddedPathNames;
  15. /**
  16. * @see \Drupal\Core\Extension\ExtensionList::setPathname()
  17. */
  18. public function setPathname($extension_name, $pathname) {
  19. parent::setPathname($extension_name, $pathname);
  20. // In the early installer the container is rebuilt multiple times. Therefore
  21. // we have to keep the added filenames across those rebuilds. This is not a
  22. // final design, but rather just a workaround resolved at some point,
  23. // hopefully.
  24. // @todo Remove as part of https://drupal.org/project/drupal/issues/2934063
  25. static::$staticAddedPathNames[$extension_name] = $pathname;
  26. }
  27. /**
  28. * @see \Drupal\Core\Extension\ExtensionList::getPathname()
  29. */
  30. public function getPathname($extension_name) {
  31. if (isset($this->addedPathNames[$extension_name])) {
  32. return $this->addedPathNames[$extension_name];
  33. }
  34. elseif (isset($this->pathNames[$extension_name])) {
  35. return $this->pathNames[$extension_name];
  36. }
  37. elseif (isset(static::$staticAddedPathNames[$extension_name])) {
  38. return static::$staticAddedPathNames[$extension_name];
  39. }
  40. elseif (($path_names = $this->getPathnames()) && isset($path_names[$extension_name])) {
  41. // Ensure we don't have to do path scanning more than really needed.
  42. foreach ($path_names as $extension => $path_name) {
  43. static::$staticAddedPathNames[$extension] = $path_name;
  44. }
  45. return $path_names[$extension_name];
  46. }
  47. throw new \InvalidArgumentException("The {$this->type} $extension_name does not exist.");
  48. }
  49. }