diff --git a/src/Service/SnipParser/Twig/SnipTwigExtension.php b/src/Service/SnipParser/Twig/SnipTwigExtension.php index 2485bcf..de249b1 100644 --- a/src/Service/SnipParser/Twig/SnipTwigExtension.php +++ b/src/Service/SnipParser/Twig/SnipTwigExtension.php @@ -2,7 +2,10 @@ namespace App\Service\SnipParser\Twig; +use App\Dto\SnipFilterRequest; +use App\Entity\Snip; use App\Repository\SnipRepository; +use Symfony\Bundle\SecurityBundle\Security; use Symfony\Component\DependencyInjection\Attribute\Autowire; use Symfony\Component\Routing\RouterInterface; use Twig\Extension\AbstractExtension; @@ -13,6 +16,7 @@ class SnipTwigExtension extends AbstractExtension public function __construct( #[Autowire(lazy: true)] private readonly RouterInterface $router, #[Autowire(lazy: true)] private readonly SnipRepository $snipRepo, + #[Autowire(lazy: true)] private readonly Security $security, ) {} public function getFunctions(): array @@ -22,6 +26,7 @@ class SnipTwigExtension extends AbstractExtension new TwigFunction('snipLink', $this->snipLink(...), [ 'is_safe' => ['html'], ]), + new TwigFunction('snipsByTag', $this->snipsByTag(...)), ]; } @@ -40,4 +45,14 @@ class SnipTwigExtension extends AbstractExtension } return sprintf('%s', $this->snipPath($id), $snip); } + + private function snipsByTag(string $tag): array + { + $request = new SnipFilterRequest(SnipFilterRequest::VISIBILITY_ALL, tag: $tag); + $snips = $this->snipRepo->findByRequest($this->security->getUser(), $request); + return array_map(fn(Snip $snip) => [ + 'id' => $snip->getId(), + 'name' => $snip->getName(), + ], $snips); + } } \ No newline at end of file