Change record status: 
Project: 
Introduced in branch: 
11.5.x
Introduced in version: 
11.5.0
Description: 

\Drupal\Core\Routing\RouteSubscriberBase now subscribes to RoutingEvents::STATIC in addition to RoutingEvents::ALTER. Subclasses implement buildRoutes() to return new routes. This replaces route_callbacks entries in *.routing.yml files.

alterRoutes() is no longer abstract. Subclasses that only define routes can omit it. Existing subscribers continue to work unchanged.

Before

# my_module.routing.yml
route_callbacks:
  - 'my_module.route_subscriber:routes'
class RouteSubscriber extends RouteSubscriberBase {

  public function routes() {
    $collection = new RouteCollection();
    // Add routes.
    return $collection;
  }

  protected function alterRoutes(RouteCollection $collection) {
    // Alter routes.
  }

}

After

class RouteSubscriber extends RouteSubscriberBase {

  protected function buildRoutes(): RouteCollection {
    $collection = new RouteCollection();
    // Add routes.
    return $collection;
  }

  protected function alterRoutes(RouteCollection $collection) {
    // Alter routes (omit this method entirely if no altering is required).
  }

}

A subclass that overrides getSubscribedEvents() must keep the RoutingEvents::STATIC entry, or call parent::getSubscribedEvents().

Impacts: 
Module developers