<?php
namespace App\Twig;
use App\Manager\User\PermissionManager;
use Symfony\Bridge\Twig\Extension\RoutingExtension;
use Twig\Extension\AbstractExtension;
use Twig\TwigFunction;
class KiwiRoutingExtension extends AbstractExtension
{
public const ROUTE_ACCESS_DENIED = 'kiwi_access_denied_for_this_route';
private RoutingExtension $originalExtension;
private PermissionManager $permissionManager;
public function __construct(RoutingExtension $helloExtension, PermissionManager $permissionManager)
{
$this->originalExtension = $helloExtension;
$this->permissionManager = $permissionManager;
}
public function getFunctions(): array
{
return [
new TwigFunction('url', [$this, 'getUrl'], ['is_safe_callback' => [$this->originalExtension, 'isUrlGenerationSafe']]),
new TwigFunction('path', [$this, 'getPath'], ['is_safe_callback' => [$this->originalExtension, 'isUrlGenerationSafe']]),
];
}
public function getPath($name, $parameters = [], $relative = false): string
{
// We check if the user can access to the route
if ($this->permissionManager->hasPermissionByRoute($name)) {
return $this->originalExtension->getPath($name, $parameters, $relative);
} else {
return self::ROUTE_ACCESS_DENIED;
}
}
public function getUrl($name, $parameters = [], $schemeRelative = false): string
{
return $this->originalExtension->getUrl($name, $parameters, $schemeRelative);
}
}