You are here

public function RouteProvider::preLoadRoutes in Drupal 9

Same name in this branch
  1. 9 core/tests/Drupal/KernelTests/RouteProvider.php \Drupal\KernelTests\RouteProvider::preLoadRoutes()
  2. 9 core/lib/Drupal/Core/Routing/RouteProvider.php \Drupal\Core\Routing\RouteProvider::preLoadRoutes()
Same name and namespace in other branches
  1. 8 core/lib/Drupal/Core/Routing/RouteProvider.php \Drupal\Core\Routing\RouteProvider::preLoadRoutes()

Pre-load routes by their names using the provided list of names.

This method exists in order to allow performance optimizations. It allows pre-loading serialized routes that may latter be retrieved using ::getRoutesByName()

Parameters

string[] $names: Array of route names to load.

Overrides PreloadableRouteProviderInterface::preLoadRoutes

1 call to RouteProvider::preLoadRoutes()
RouteProvider::getRoutesByNames in core/lib/Drupal/Core/Routing/RouteProvider.php
Find many routes by their names using the provided list of names.

File

core/lib/Drupal/Core/Routing/RouteProvider.php, line 215

Class

RouteProvider
A Route Provider front-end for all Drupal-stored routes.

Namespace

Drupal\Core\Routing

Code

public function preLoadRoutes($names) {
  if (empty($names)) {
    throw new \InvalidArgumentException('You must specify the route names to load');
  }
  $routes_to_load = array_diff($names, array_keys($this->routes), array_keys($this->serializedRoutes));
  if ($routes_to_load) {
    $cid = static::ROUTE_LOAD_CID_PREFIX . hash('sha512', serialize($routes_to_load));
    if ($cache = $this->cache
      ->get($cid)) {
      $routes = $cache->data;
    }
    else {
      try {
        $result = $this->connection
          ->query('SELECT [name], [route] FROM {' . $this->connection
          ->escapeTable($this->tableName) . '} WHERE [name] IN ( :names[] )', [
          ':names[]' => $routes_to_load,
        ]);
        $routes = $result
          ->fetchAllKeyed();
        $this->cache
          ->set($cid, $routes, Cache::PERMANENT, [
          'routes',
        ]);
      } catch (\Exception $e) {
        $routes = [];
      }
    }
    $this->serializedRoutes += $routes;
  }
}