diff --git a/core/core.services.yml b/core/core.services.yml index 5996bb9..7cdd453 100644 --- a/core/core.services.yml +++ b/core/core.services.yml @@ -1047,7 +1047,7 @@ services: arguments: ['@twig.loader_chain', '@module_handler', '@theme_handler', '%twig.config%'] tags: - { name: service_collector, tag: 'twig.extension', call: addExtension } - # - { name: service_collector, tag: 'twig.loader', call: addLoader } + - { name: service_collector, tag: 'twig.loader', call: addLoader } twig.extension: class: Drupal\Core\Template\TwigExtension tags: @@ -1063,20 +1063,22 @@ services: - { name: twig.extension } twig.loader_chain: class: Twig_Loader_Chain - calls: - - [addLoader, [@twig.loader]] - - [addLoader, [@twig.loader.theme_registry]] - - [addLoader, [@twig.loader.string]] twig.loader: alias: twig.loader.filesystem twig.loader.filesystem: class: Twig_Loader_Filesystem arguments: ['%app.root%'] + tags: + - { name: twig.loader, priority: 100 } twig.loader.theme_registry: class: Drupal\Core\Template\TwigThemeRegistryLoader arguments: ['@theme.registry'] + tags: + - { name: twig.loader, priority: 0 } twig.loader.string: class: Twig_Loader_String + tags: + - { name: twig.loader, priority: -100 } element_info: alias: plugin.manager.element_info file.mime_type.guesser: diff --git a/core/lib/Drupal/Core/Template/TwigEnvironment.php b/core/lib/Drupal/Core/Template/TwigEnvironment.php index 464250c..67d461a 100644 --- a/core/lib/Drupal/Core/Template/TwigEnvironment.php +++ b/core/lib/Drupal/Core/Template/TwigEnvironment.php @@ -213,4 +213,16 @@ public function renderInline($template_string, array $context = array()) { return $this->loadTemplate($template_string, NULL)->render($context); } + /** + * Adds a new loader to the Twig environment. + * + * @param Twig_LoaderInterface $loader A Loader instance + */ + public function addLoader(\Twig_LoaderInterface $loader) { + if ($this->extensionInitialized) { + throw new \LogicException('Unable to add a loader as extensions have already been initialized.'); + } + $this->loader->addLoader($loader); + } + }