diff --git a/src/Service/SnipParser/Twig/SnipLoader.php b/src/Service/SnipParser/Twig/SnipLoader.php new file mode 100644 index 0000000..2ccd297 --- /dev/null +++ b/src/Service/SnipParser/Twig/SnipLoader.php @@ -0,0 +1,56 @@ +contentService->getActiveText($this->getFromKey($name)), $name); + } + + public function getCacheKey(string $name): string + { + return $this->getFromKey($name)->getActiveVersion()->getId(); + } + + public function isFresh(string $name, int $time): bool + { + $this->getFromKey($name); + + return true; + } + + public function exists(string $name) + { + try { + $this->getFromKey($name); + } catch (LoaderError) { + return false; + } + + return true; + } + + private function getFromKey(string $key): Snip + { + $snip = $this->repository->find($key); + if (!$snip) { + throw new LoaderError(\sprintf('Template "%s" is not defined.', $key)); + } + + return $snip; + } +} \ No newline at end of file diff --git a/src/Service/SnipParser/Twig/TwigParser.php b/src/Service/SnipParser/Twig/TwigParser.php index 2804ea7..bccd385 100644 --- a/src/Service/SnipParser/Twig/TwigParser.php +++ b/src/Service/SnipParser/Twig/TwigParser.php @@ -5,9 +5,14 @@ namespace App\Service\SnipParser\Twig; use App\Service\SnipParser\AbstractParser; use Twig\Environment; use Twig\Loader\ArrayLoader; +use Twig\Loader\ChainLoader; class TwigParser extends AbstractParser { + public function __construct( + private readonly SnipLoader $snipLoader, + ) {} + public static function getName(): string { return 'twig'; @@ -16,12 +21,15 @@ class TwigParser extends AbstractParser public function parseView(string $content): string { try { - $arrayLoader = new ArrayLoader([ - 'index' => $content, + $loader = new ChainLoader([ + new ArrayLoader([ + 'index' => $content, + ]), + $this->snipLoader, ]); - $twig = new Environment($arrayLoader); + $twig = new Environment($loader); return $twig->render('index'); - }catch (\Exception $exception) { + } catch (\Exception $exception) { return sprintf('
%s
', htmlspecialchars($exception->getMessage())); } }