requestStack = $requestStack; $this->originalExtension = $originalExtension; } public function getFunctions() { return [ new TwigFunction('chill_return_path_or', [$this, 'getReturnPathOr'], ['is_safe_callback' => [$this, 'isUrlGenerationSafe']] ), new TwigFunction('chill_path_add_return_path', [$this, 'getPathAddReturnPath'], ['is_safe_callback' => [$this, 'isUrlGenerationSafe']] ), new TwigFunction('chill_path_forward_return_path', [$this, 'getPathForwardReturnPath'], ['is_safe_callback' => [$this, 'isUrlGenerationSafe']] ) ]; } public function isUrlGenerationSafe(\Twig_Node $argsNode) { return $this->originalExtension->isUrlGenerationSafe($argsNode); } /** * Return the return path if it exists, or generate the path if not. * * @param string $name * @param array $parameters * @param bool $relative * @return string */ public function getReturnPathOr($name, $parameters = [], $relative = false) { $request = $this->requestStack->getCurrentRequest(); if ($request->query->has('returnPath')) { return $request->query->get('returnPath'); } return $this->originalExtension->getPath($name, $parameters, $relative); } /** * Build an url with a returnPath parameter to current page * * @param string $name * @param array $parameters * @param bool $relative * @return string */ public function getPathAddReturnPath($name, $parameters = [], $relative = false) { $request = $this->requestStack->getCurrentRequest(); $parameters['returnPath'] = $request->getRequestUri(); return $this->originalExtension->getPath($name, $parameters, $relative); } /** * Build an url with a returnPath parameter to current page * * @param string $name * @param array $parameters * @param bool $relative * @return string */ public function getPathForwardReturnPath($name, $parameters = [], $relative = false) { $request = $this->requestStack->getCurrentRequest(); if ($request->query->has('returnPath')) { $parameters['returnPath'] = $request->query->get('returnPath'); } return $this->originalExtension ->getPath( $name, $parameters, $relative ); } }