123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- <?php
- /*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
- namespace Symfony\Bundle\TwigBundle\CacheWarmer;
- use Psr\Container\ContainerInterface;
- use Symfony\Component\HttpKernel\CacheWarmer\CacheWarmerInterface;
- use Symfony\Contracts\Service\ServiceSubscriberInterface;
- use Twig\Environment;
- use Twig\Error\Error;
- /**
- * Generates the Twig cache for all templates.
- *
- * @author Fabien Potencier <fabien@symfony.com>
- */
- class TemplateCacheWarmer implements CacheWarmerInterface, ServiceSubscriberInterface
- {
- private $container;
- private $twig;
- private $iterator;
- public function __construct(ContainerInterface $container, iterable $iterator)
- {
- // As this cache warmer is optional, dependencies should be lazy-loaded, that's why a container should be injected.
- $this->container = $container;
- $this->iterator = $iterator;
- }
- /**
- * {@inheritdoc}
- *
- * @return string[] A list of template files to preload on PHP 7.4+
- */
- public function warmUp(string $cacheDir)
- {
- if (null === $this->twig) {
- $this->twig = $this->container->get('twig');
- }
- $files = [];
- foreach ($this->iterator as $template) {
- try {
- $template = $this->twig->load($template);
- if (\is_callable([$template, 'unwrap'])) {
- $files[] = (new \ReflectionClass($template->unwrap()))->getFileName();
- }
- } catch (Error $e) {
- // problem during compilation, give up
- // might be a syntax error or a non-Twig template
- }
- }
- return $files;
- }
- /**
- * {@inheritdoc}
- */
- public function isOptional()
- {
- return true;
- }
- /**
- * {@inheritdoc}
- */
- public static function getSubscribedServices()
- {
- return [
- 'twig' => Environment::class,
- ];
- }
- }
|