diff --git a/src/Service/SnipParser/Twig/SnipTwigExtension.php b/src/Service/SnipParser/Twig/SnipTwigExtension.php
new file mode 100644
index 0000000..595a63c
--- /dev/null
+++ b/src/Service/SnipParser/Twig/SnipTwigExtension.php
@@ -0,0 +1,40 @@
+snipPath(...)),
+ new TwigFunction('snipLink', $this->snipLink(...), [
+ 'is_safe' => ['html'],
+ ]),
+ ];
+ }
+
+ function snipPath(int $id): string
+ {
+ return $this->router->generate('snip_single', [
+ 'snip' => $id,
+ ]);
+ }
+
+ function snipLink(int $id): string
+ {
+ $snip = $this->snipRepo->find($id);
+ return sprintf('%s', $this->snipPath($id), $snip);
+ }
+}
\ No newline at end of file
diff --git a/src/Service/SnipParser/Twig/TwigParser.php b/src/Service/SnipParser/Twig/TwigParser.php
index 37ae3e4..8e4f86b 100644
--- a/src/Service/SnipParser/Twig/TwigParser.php
+++ b/src/Service/SnipParser/Twig/TwigParser.php
@@ -11,6 +11,7 @@ class TwigParser extends AbstractParser
{
public function __construct(
private readonly SnipLoader $snipLoader,
+ private readonly SnipTwigExtension $snipTwigExtension,
) {}
public function safeParseView(string $content): string
@@ -22,6 +23,7 @@ class TwigParser extends AbstractParser
$this->snipLoader,
]);
$twig = new Environment($loader);
+ $twig->addExtension($this->snipTwigExtension);
return $twig->render('index');
}
diff --git a/templates/base/navbar.html.twig b/templates/base/navbar.html.twig
index 86c5593..8903f46 100644
--- a/templates/base/navbar.html.twig
+++ b/templates/base/navbar.html.twig
@@ -1,6 +1,6 @@