ClassResolver.php 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. <?php
  2. namespace Drupal\Core\DependencyInjection;
  3. use Symfony\Component\DependencyInjection\ContainerAwareTrait;
  4. use Symfony\Component\DependencyInjection\ContainerAwareInterface;
  5. /**
  6. * Implements the class resolver interface supporting class names and services.
  7. */
  8. class ClassResolver implements ClassResolverInterface, ContainerAwareInterface {
  9. use DependencySerializationTrait;
  10. use ContainerAwareTrait;
  11. /**
  12. * {@inheritdoc}
  13. */
  14. public function getInstanceFromDefinition($definition) {
  15. if ($this->container->has($definition)) {
  16. $instance = $this->container->get($definition);
  17. }
  18. else {
  19. if (!class_exists($definition)) {
  20. throw new \InvalidArgumentException(sprintf('Class "%s" does not exist.', $definition));
  21. }
  22. if (is_subclass_of($definition, 'Drupal\Core\DependencyInjection\ContainerInjectionInterface')) {
  23. $instance = $definition::create($this->container);
  24. }
  25. else {
  26. $instance = new $definition();
  27. }
  28. }
  29. if ($instance instanceof ContainerAwareInterface) {
  30. $instance->setContainer($this->container);
  31. }
  32. return $instance;
  33. }
  34. }