SpecialAttributesRouteSubscriber.php 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. <?php
  2. namespace Drupal\Core\EventSubscriber;
  3. use Drupal\Core\Routing\RouteBuildEvent;
  4. use Drupal\Core\Routing\RouteSubscriberBase;
  5. use Symfony\Cmf\Component\Routing\RouteObjectInterface;
  6. use Symfony\Component\Routing\RouteCollection;
  7. /**
  8. * Provides a route subscriber which checks for invalid pattern variables.
  9. */
  10. class SpecialAttributesRouteSubscriber extends RouteSubscriberBase {
  11. /**
  12. * {@inheritdoc}
  13. */
  14. protected function alterRoutes(RouteCollection $collection) {
  15. $special_variables = [
  16. 'system_path',
  17. '_legacy',
  18. '_raw_variables',
  19. RouteObjectInterface::ROUTE_OBJECT,
  20. RouteObjectInterface::ROUTE_NAME,
  21. '_content',
  22. '_controller',
  23. '_form',
  24. ];
  25. foreach ($collection->all() as $name => $route) {
  26. if ($not_allowed_variables = array_intersect($route->compile()->getVariables(), $special_variables)) {
  27. $reserved = implode(', ', $not_allowed_variables);
  28. trigger_error(sprintf('Route %s uses reserved variable names: %s', $name, $reserved), E_USER_WARNING);
  29. }
  30. }
  31. }
  32. /**
  33. * Delegates the route altering to self::alterRoutes().
  34. *
  35. * @param \Drupal\Core\Routing\RouteBuildEvent $event
  36. * The route build event.
  37. */
  38. public function onAlterRoutes(RouteBuildEvent $event) {
  39. $collection = $event->getRouteCollection();
  40. $this->alterRoutes($collection);
  41. }
  42. }