. */ declare(strict_types=1); namespace App\Twig; use App\Services\InfoProviderSystem\ProviderRegistry; use App\Services\InfoProviderSystem\Providers\InfoProviderInterface; use Twig\Extension\AbstractExtension; use Twig\TwigFunction; class InfoProviderExtension extends AbstractExtension { public function __construct( private readonly ProviderRegistry $providerRegistry ) {} public function getFunctions(): array { return [ new TwigFunction('info_provider', $this->getInfoProvider(...)), new TwigFunction('info_provider_label', $this->getInfoProviderName(...)) ]; } /** * Gets the info provider with the given key. Returns null, if the provider does not exist. * @param string $key * @return InfoProviderInterface|null */ private function getInfoProvider(string $key): ?InfoProviderInterface { try { return $this->providerRegistry->getProviderByKey($key); } catch (\InvalidArgumentException $exception) { return null; } } /** * Gets the label of the info provider with the given key. Returns null, if the provider does not exist. * @param string $key * @return string|null */ private function getInfoProviderName(string $key): ?string { try { return $this->providerRegistry->getProviderByKey($key)->getProviderInfo()['name']; } catch (\InvalidArgumentException $exception) { return null; } } }