EntityRouteAlterSubscriber.php 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. <?php
  2. namespace Drupal\Core\EventSubscriber;
  3. use Drupal\Core\Entity\EntityResolverManager;
  4. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  5. use Drupal\Core\Routing\RoutingEvents;
  6. use Drupal\Core\Routing\RouteBuildEvent;
  7. /**
  8. * Registers the 'type' of route parameter names that match an entity type.
  9. *
  10. * @todo Matching on parameter *name* is not ideal, because it breaks
  11. * encapsulation: parameter names are local to the controller and route, and
  12. * controllers and routes can't be expected to know what all possible entity
  13. * types might exist across all modules in order to pick names that don't
  14. * conflict. Instead, the 'type' should be determined from introspecting what
  15. * kind of PHP variable (e.g., a type hinted interface) the controller
  16. * requires: https://www.drupal.org/node/2041907.
  17. */
  18. class EntityRouteAlterSubscriber implements EventSubscriberInterface {
  19. /**
  20. * The entity resolver manager.
  21. *
  22. * @var \Drupal\Core\Entity\EntityResolverManager
  23. */
  24. protected $resolverManager;
  25. /**
  26. * Constructs an EntityRouteAlterSubscriber instance.
  27. *
  28. * @param \Drupal\Core\Entity\EntityResolverManager $entity_resolver_manager
  29. * The entity resolver manager.
  30. */
  31. public function __construct(EntityResolverManager $entity_resolver_manager) {
  32. $this->resolverManager = $entity_resolver_manager;
  33. }
  34. /**
  35. * Applies parameter converters to route parameters.
  36. *
  37. * @param \Drupal\Core\Routing\RouteBuildEvent $event
  38. * The event to process.
  39. */
  40. public function onRoutingRouteAlterSetType(RouteBuildEvent $event) {
  41. foreach ($event->getRouteCollection() as $route) {
  42. $this->resolverManager->setRouteOptions($route);
  43. }
  44. }
  45. /**
  46. * {@inheritdoc}
  47. */
  48. public static function getSubscribedEvents() {
  49. $events[RoutingEvents::ALTER][] = ['onRoutingRouteAlterSetType', -150];
  50. return $events;
  51. }
  52. }