* @copyright Since 2007 PrestaShop SA and Contributors * @license https://opensource.org/licenses/OSL-3.0 Open Software License (OSL 3.0) */ namespace PrestaShopBundle\Twig\Extension; use Symfony\Component\HttpFoundation\RequestStack; use Symfony\Component\Security\Csrf\CsrfTokenManagerInterface; use Twig\Extension\AbstractExtension; use Twig\TwigFunction; /** * Provides data needed for Javascript router component */ class JsRouterMetadataExtension extends AbstractExtension { /** * @var RequestStack */ private $requestStack; /** * @var CsrfTokenManagerInterface */ private $tokenManager; /** * @var string */ private $username; /** * @param RequestStack $requestStack * @param CsrfTokenManagerInterface $tokenManager * @param string $username */ public function __construct( RequestStack $requestStack, CsrfTokenManagerInterface $tokenManager, string $username ) { $this->requestStack = $requestStack; $this->tokenManager = $tokenManager; $this->username = $username; } /** * {@inheritdoc} */ public function getFunctions() { return [ new TwigFunction('js_router_metadata', [$this, 'getJsRouterMetadata']), ]; } /** * Get base url and security token used for javascript router component. * * @return array */ public function getJsRouterMetadata() { return [ // base url for javascript router 'base_url' => $this->requestStack->getCurrentRequest()->getBaseUrl(), //security token for javascript router 'token' => $this->tokenManager->getToken($this->username)->getValue(), ]; } }