TwigEnvironment.php 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. <?php
  2. /**
  3. * @package Grav\Common\Twig
  4. *
  5. * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved.
  6. * @license MIT License; see LICENSE file for details.
  7. */
  8. namespace Grav\Common\Twig;
  9. use Twig\Environment;
  10. use Twig\Error\LoaderError;
  11. use Twig\Loader\ExistsLoaderInterface;
  12. use Twig\Loader\LoaderInterface;
  13. use Twig\Template;
  14. use Twig\TemplateWrapper;
  15. /**
  16. * Class TwigEnvironment
  17. * @package Grav\Common\Twig
  18. */
  19. class TwigEnvironment extends Environment
  20. {
  21. use WriteCacheFileTrait;
  22. /**
  23. * @inheritDoc
  24. */
  25. public function resolveTemplate($names)
  26. {
  27. if (!\is_array($names)) {
  28. $names = [$names];
  29. }
  30. $count = \count($names);
  31. foreach ($names as $name) {
  32. if ($name instanceof Template) {
  33. return $name;
  34. }
  35. if ($name instanceof TemplateWrapper) {
  36. return $name;
  37. }
  38. // Optimization: Avoid throwing an exception when it would be ignored anyway.
  39. if (1 !== $count) {
  40. /** @var LoaderInterface|ExistsLoaderInterface $loader */
  41. $loader = $this->getLoader();
  42. if (!$loader->exists($name)) {
  43. continue;
  44. }
  45. }
  46. // Throws LoaderError: Unable to find template "%s".
  47. return $this->loadTemplate($name);
  48. }
  49. throw new LoaderError(sprintf('Unable to find one of the following templates: "%s".', implode('", "', $names)));
  50. }
  51. }