diff -u b/core/lib/Drupal/Core/Routing/RequestFormatRouteFilter.php b/core/lib/Drupal/Core/Routing/RequestFormatRouteFilter.php --- b/core/lib/Drupal/Core/Routing/RequestFormatRouteFilter.php +++ b/core/lib/Drupal/Core/Routing/RequestFormatRouteFilter.php @@ -17,6 +17,7 @@ public function filter(RouteCollection $collection, Request $request) { // Determine the request format. $default_format = static::getDefaultFormat($collection); + // If the request does not specify a format then use the default. if (is_null($request->getRequestFormat(NULL))) { $format = $default_format; $request->setRequestFormat($default_format); @@ -78,25 +79,22 @@ */ protected static function getDefaultFormat(RouteCollection $collection) { $default_format = 'html'; - $iterator = $collection->getIterator(); - $first_route = $iterator->current(); - $required_format = $first_route->getRequirement('_format'); + $routes = array_values($collection->all()); + + $required_format = $routes[0]->getRequirement('_format'); + // If the first route supports multiple formats then return the default. if (strpos($required_format, '|') !== FALSE) { return $default_format; } - if (!$iterator->valid()) { - return $required_format; - } - else { - $iterator->next(); - for ($iterator; $iterator->valid(); $iterator->next()) { - $route = $iterator->current(); - if ($required_format != $route->getRequirement('_format')) { - return $default_format; - } + // If there are multiple routes which require different formats then return + // the default. + for ($i = 1; $i < count($routes); $i++) { + if ($required_format != $routes[$i]->getRequirement('_format')) { + return $default_format; } - return $required_format; } + // All the routes require the same single format so return it. + return $required_format; } }