You are here

protected function ThemeRegistryLoader::findTemplate in Drupal 8

Same name and namespace in other branches
  1. 9 core/lib/Drupal/Core/Template/Loader/ThemeRegistryLoader.php \Drupal\Core\Template\Loader\ThemeRegistryLoader::findTemplate()

Finds the path to the requested template.

Parameters

string $name: The name of the template to load.

bool $throw: Whether to throw an exception when an error occurs.

Return value

string|false The path to the template, or false if the template is not found.

Throws

\Twig_Error_Loader Thrown if a template matching $name cannot be found.

File

core/lib/Drupal/Core/Template/Loader/ThemeRegistryLoader.php, line 45

Class

ThemeRegistryLoader
Loads templates based on information from the Drupal theme registry.

Namespace

Drupal\Core\Template\Loader

Code

protected function findTemplate($name, $throw = TRUE) {

  // Allow for loading based on the Drupal theme registry.
  $hook = str_replace('.html.twig', '', strtr($name, '-', '_'));
  $theme_registry = $this->themeRegistry
    ->getRuntime();
  if ($theme_registry
    ->has($hook)) {
    $info = $theme_registry
      ->get($hook);
    if (isset($info['path'])) {
      $path = $info['path'] . '/' . $name;
    }
    elseif (isset($info['template'])) {
      $path = $info['template'] . '.html.twig';
    }
    if (isset($path) && is_file($path)) {
      return $this->cache[$name] = $path;
    }
  }
  if ($throw) {
    throw new \Twig_Error_Loader(sprintf('Unable to find template "%s" in the Drupal theme registry.', $name));
  }
  return FALSE;
}