src/Twig/KiwiRoutingExtension.php line 33

Open in your IDE?
  1. <?php
  2. namespace App\Twig;
  3. use App\Manager\User\PermissionManager;
  4. use Symfony\Bridge\Twig\Extension\RoutingExtension;
  5. use Twig\Extension\AbstractExtension;
  6. use Twig\TwigFunction;
  7. class KiwiRoutingExtension extends AbstractExtension
  8. {
  9.     public const ROUTE_ACCESS_DENIED 'kiwi_access_denied_for_this_route';
  10.     private RoutingExtension $originalExtension;
  11.     private PermissionManager $permissionManager;
  12.     public function __construct(RoutingExtension $helloExtensionPermissionManager $permissionManager)
  13.     {
  14.         $this->originalExtension $helloExtension;
  15.         $this->permissionManager $permissionManager;
  16.     }
  17.     public function getFunctions(): array
  18.     {
  19.         return [
  20.             new TwigFunction('url', [$this'getUrl'], ['is_safe_callback' => [$this->originalExtension'isUrlGenerationSafe']]),
  21.             new TwigFunction('path', [$this'getPath'], ['is_safe_callback' => [$this->originalExtension'isUrlGenerationSafe']]),
  22.         ];
  23.     }
  24.     public function getPath($name$parameters = [], $relative false): string
  25.     {
  26.         // We check if the user can access to the route
  27.         if ($this->permissionManager->hasPermissionByRoute($name)) {
  28.             return $this->originalExtension->getPath($name$parameters$relative);
  29.         } else {
  30.             return self::ROUTE_ACCESS_DENIED;
  31.         }
  32.     }
  33.     public function getUrl($name$parameters = [], $schemeRelative false): string
  34.     {
  35.         return $this->originalExtension->getUrl($name$parameters$schemeRelative);
  36.     }
  37. }