You are here

class FilesystemLoader in Drupal 9

Same name and namespace in other branches
  1. 8 core/lib/Drupal/Core/Template/Loader/FilesystemLoader.php \Drupal\Core\Template\Loader\FilesystemLoader
  2. 10 core/lib/Drupal/Core/Template/Loader/FilesystemLoader.php \Drupal\Core\Template\Loader\FilesystemLoader

Loads templates from the filesystem.

This loader adds module and theme template paths as namespaces to the Twig filesystem loader so that templates can be referenced by namespace, like @block/block.html.twig or @my_theme/page.html.twig.

Hierarchy

  • class \Drupal\Core\Template\Loader\FilesystemLoader extends \Twig\Loader\FilesystemLoader

Expanded class hierarchy of FilesystemLoader

1 string reference to 'FilesystemLoader'
core.services.yml in core/core.services.yml
core/core.services.yml
1 service uses FilesystemLoader
twig.loader.filesystem in core/core.services.yml
Drupal\Core\Template\Loader\FilesystemLoader

File

core/lib/Drupal/Core/Template/Loader/FilesystemLoader.php, line 16

Namespace

Drupal\Core\Template\Loader
View source
class FilesystemLoader extends TwigFilesystemLoader {

  /**
   * Constructs a new FilesystemLoader object.
   *
   * @param string|array $paths
   *   A path or an array of paths to check for templates.
   * @param \Drupal\Core\Extension\ModuleHandlerInterface $module_handler
   *   The module handler service.
   * @param \Drupal\Core\Extension\ThemeHandlerInterface $theme_handler
   *   The theme handler service.
   */
  public function __construct($paths, ModuleHandlerInterface $module_handler, ThemeHandlerInterface $theme_handler) {
    parent::__construct($paths);

    // Add namespaced paths for modules and themes.
    $namespaces = [];
    foreach ($module_handler
      ->getModuleList() as $name => $extension) {
      $namespaces[$name] = $extension
        ->getPath();
    }
    foreach ($theme_handler
      ->listInfo() as $name => $extension) {
      $namespaces[$name] = $extension
        ->getPath();
    }
    foreach ($namespaces as $name => $path) {
      $this
        ->addPath($path . '/templates', $name);
    }
  }

  /**
   * Adds a path where templates are stored.
   *
   * @param string $path
   *   A path where to look for templates.
   * @param string $namespace
   *   (optional) A path name.
   */
  public function addPath($path, $namespace = self::MAIN_NAMESPACE) {

    // Invalidate the cache.
    $this->cache = [];
    $this->paths[$namespace][] = rtrim($path, '/\\');
  }

}

Members

Namesort descending Modifiers Type Description Overrides
FilesystemLoader::addPath public function Adds a path where templates are stored.
FilesystemLoader::__construct public function Constructs a new FilesystemLoader object.