diff --git a/core/lib/Drupal/Core/CoreServiceProvider.php b/core/lib/Drupal/Core/CoreServiceProvider.php index 054691a..7abefdc 100644 --- a/core/lib/Drupal/Core/CoreServiceProvider.php +++ b/core/lib/Drupal/Core/CoreServiceProvider.php @@ -112,7 +112,7 @@ public static function registerTwig(ContainerBuilder $container) { $twig_extension = new Definition('Drupal\Core\Template\TwigExtension'); // When in the installer these services are not yet available. if (!drupal_installation_attempted()) { - $twig_extension->addMethodCall('setGenerators', array(new Reference('url_generator'), new Reference('link_generator'))); + $twig_extension->addMethodCall('setGenerators', array(new Reference('url_generator'))); } $container->register('twig', 'Drupal\Core\Template\TwigEnvironment') ->addArgument(new Reference('twig.loader')) diff --git a/core/lib/Drupal/Core/Template/TwigExtension.php b/core/lib/Drupal/Core/Template/TwigExtension.php index b26d169..dd92545 100644 --- a/core/lib/Drupal/Core/Template/TwigExtension.php +++ b/core/lib/Drupal/Core/Template/TwigExtension.php @@ -11,7 +11,7 @@ namespace Drupal\Core\Template; use Drupal\Core\Routing\UrlGeneratorInterface; -use Drupal\Core\Utility\LinkGeneratorInterface; +use Guzzle\Common\Exception\ExceptionCollection; /** * A class for providing Twig extensions (specific Twig_NodeVisitors, filters and functions). @@ -28,32 +28,19 @@ class TwigExtension extends \Twig_Extension { protected $urlGenerator; /** - * The link generator. - * - * @var \Drupal\Core\Utility\LinkGeneratorInterface - */ - protected $linkGenerator; - - /** * Constructs \Drupal\Core\Template\TwigExtension. * * @param \Drupal\Core\Routing\UrlGeneratorInterface $url_generator * The URL generator. - * @param \Drupal\Core\Utility\LinkGeneratorInterface $link_generator - * The link generator. */ - public function setGenerators(UrlGeneratorInterface $url_generator, LinkGeneratorInterface $link_generator) { + public function setGenerators(UrlGeneratorInterface $url_generator) { $this->urlGenerator = $url_generator; - $this->linkGenerator = $link_generator; } public function getFunctions() { // @todo re-add unset => twig_unset if this is really needed return array( - // @todo Remove URL function once http://drupal.org/node/1778610 is resolved. - 'url_from_path' => new \Twig_SimpleFunction('url_from_path', array($this, 'generateFromPath')), 'url' => new \Twig_SimpleFunction('url', array($this, 'generateUrl')), - 'link' => new \Twig_SimpleFunction('link', array($this, 'generateLink'), array('is_safe' => array('html'))), // These functions will receive a TwigReference object, if a render array is detected 'hide' => new TwigReferenceFunction('twig_hide'), 'render_var' => new TwigReferenceFunction('twig_render_var'), @@ -97,30 +84,22 @@ public function getName() } /** - * Generates a URL using the route generator. + * Generates a URL using the route generator or path generator. * * @see \Drupal\Core\Routing\UrlGeneratorInterface::generateFromRoute() - */ - public function generateUrl($route_name, $route_parameters = array(), $options = array()) { - return $this->urlGenerator->generateFromRoute($route_name, $route_parameters, $options); - } - - /** - * Generates a URL using the route generator and the method generateFromPath. - * * @see \Drupal\Core\Routing\UrlGeneratorInterface::generateFromPath() */ - public function generateFromPath($path, $options = array()) { - return $this->urlGenerator->generateFromPath($path, $options); - } - - /** - * Generates a link (A tag) using the link generator. - * - * @see \Drupal\Core\Utility\LinkGeneratorInterface::generate() - */ - public function generateLink($text, $route_name, $route_parameters = array(), $options = array()) { - return $this->linkGenerator->generate($text, $route_name, $route_parameters, $options); + public function generateUrl() { + $args = func_get_args(); + // Try generating a route first. + try { + return call_user_func_array(array($this->urlGenerator, 'generateFromRoute'), $args); + } + // If provided string isn't a route, try generating from a path instead. + // This method is deprecated and is only used as a last resort. + catch (\Exception $e) { + return call_user_func_array(array($this->urlGenerator, 'generateFromPath'), $args); + } } } diff --git a/core/modules/system/lib/Drupal/system/Tests/Theme/ThemeTestTwig.php b/core/modules/system/lib/Drupal/system/Tests/Theme/ThemeTestTwig.php index 511c00b..0afec1e 100644 --- a/core/modules/system/lib/Drupal/system/Tests/Theme/ThemeTestTwig.php +++ b/core/modules/system/lib/Drupal/system/Tests/Theme/ThemeTestTwig.php @@ -56,14 +56,11 @@ public function testTwigUrlGenerator() { $url_generator = $this->container->get('url_generator'); $link_generator = $this->container->get('link_generator'); $expected = array( - 'url_from_path not absolute: ' . $url_generator->generateFromPath('user/register'), - 'url_from_path absolute: ' . $url_generator->generateFromPath('user/register', array('absolute' => TRUE)), - 'url not absolute: ' . $url_generator->generateFromRoute('user.register'), - 'url absolute: ' . $url_generator->generateFromRoute('user.register', array(), array('absolute' => TRUE)), - 'url absolute with fragment: ' . $url_generator->generateFromRoute('user.register', array(), array('absolute' => TRUE, 'fragment' => 'bottom')), - 'link not absolute: ' . $link_generator->generate('Register', 'user.register'), - 'link absolute: ' . $link_generator->generate('Register', 'user.register', array(), array('absolute' => TRUE)), - 'link absolute with fragment: ' . $link_generator->generate('Register', 'user.register', array(), array('absolute' => TRUE, 'fragment' => 'bottom')), + 'url (as path) not absolute: ' . $url_generator->generateFromPath('user/register'), + 'url (as path) absolute: ' . $url_generator->generateFromPath('user/register', array('absolute' => TRUE)), + 'url (as route) not absolute: ' . $url_generator->generateFromRoute('user.register'), + 'url (as route) absolute: ' . $url_generator->generateFromRoute('user.register', array(), array('absolute' => TRUE)), + 'url (as route) absolute with fragment: ' . $url_generator->generateFromRoute('user.register', array(), array('absolute' => TRUE, 'fragment' => 'bottom')), ); // Make sure we got something. $content = $this->drupalGetContent(); diff --git a/core/modules/system/tests/modules/twig_theme_test/templates/twig_theme_test.url_generator.html.twig b/core/modules/system/tests/modules/twig_theme_test/templates/twig_theme_test.url_generator.html.twig index 70c2179..507721a 100644 --- a/core/modules/system/tests/modules/twig_theme_test/templates/twig_theme_test.url_generator.html.twig +++ b/core/modules/system/tests/modules/twig_theme_test/templates/twig_theme_test.url_generator.html.twig @@ -1,20 +1,8 @@ -{# Test the url_from_path twig function #} -
url_from_path not absolute: {{ url_from_path('user/register') }}
- -
url_from_path absolute: {{ url_from_path('user/register', {'absolute': 1 }) }}
- -{# Test the url twig function #} - -
url not absolute: {{ url('user.register') }}
- -
url absolute: {{ url('user.register', {}, {'absolute': '1' }) }}
- -
url absolute with fragment: {{ url('user.register', {}, {'absolute': '1', 'fragment': 'bottom' }) }}
- -{# Test the link twig function #} - -
link not absolute: {{ link('Register', 'user.register') }}
- -
link absolute: {{ link('Register', 'user.register', {}, {'absolute': '1' }) }}
- -
link absolute with fragment: {{ link('Register', 'user.register', {}, {'absolute': '1', 'fragment': 'bottom' }) }}
+{# Test the url twig function with paths #} +
url (as path) not absolute: {{ url('user/register') }}
+
url (as path) absolute: {{ url('user/register', {'absolute': 1 }) }}
+ +{# Test the url twig function with routes #} +
url (as route) not absolute: {{ url('user.register') }}
+
url (as route) absolute: {{ url('user.register', {}, {'absolute': '1' }) }}
+
url (as route) absolute with fragment: {{ url('user.register', {}, {'absolute': '1', 'fragment': 'bottom' }) }}