diff --git a/core/lib/Drupal/Core/Controller/ControllerBase.php b/core/lib/Drupal/Core/Controller/ControllerBase.php index be6a669..44ac5fc 100644 --- a/core/lib/Drupal/Core/Controller/ControllerBase.php +++ b/core/lib/Drupal/Core/Controller/ControllerBase.php @@ -112,10 +112,10 @@ protected function moduleHandler() { } /** - * Returns the url generator service. + * Returns the URL generator service. * * @return \Drupal\Core\Routing\UrlGeneratorInterface - * The url generator service. + * The URL generator service. */ protected function urlGenerator() { return $this->container->get('url_generator'); @@ -124,52 +124,11 @@ protected function urlGenerator() { /** * Renders a link to a route given a route name and its parameters. * - * This function correctly handles aliased paths and sanitizing text, so all - * internal links output by modules should be generated by this function if - * possible. - * - * However, for links enclosed in translatable text you should use t() and - * embed the HTML anchor tag directly in the translated string. For example: - * @code - * t('Visit the content types page', array('@url' => Drupal::urlGenerator()->generate('node_overview_types'))); - * @endcode - * This keeps the context of the link title ('settings' in the example) for - * translators. - * - * @param string|array $text - * The link text for the anchor tag as a translated string or render array. - * @param string $route_name - * The name of the route to use to generate the link. - * @param array $parameters - * (optional) Any parameters needed to render the route path pattern. - * @param array $options - * (optional) An associative array of additional options. Defaults to an - * empty array. It may contain the following elements: - * - 'query': An array of query key/value-pairs (without any URL-encoding) to - * append to the URL. - * - absolute: Whether to force the output to be an absolute link (beginning - * with http:). Useful for links that will be displayed outside the site, - * such as in an RSS feed. Defaults to FALSE. - * - attributes: An associative array of HTML attributes to apply to the - * anchor tag. If element 'class' is included, it must be an array; 'title' - * must be a string; other elements are more flexible, as they just need - * to work as an argument for the constructor of the class - * Drupal\Core\Template\Attribute($options['attributes']). - * - html: Whether $text is HTML or just plain-text. For - * example, to make an image tag into a link, this must be set to TRUE, or - * you will see the escaped HTML image tag. $text is not sanitized if - * 'html' is TRUE. The calling function must ensure that $text is already - * safe. Defaults to FALSE. - * - language: An optional language object. If the path being linked to is - * internal to the site, $options['language'] is used to determine whether - * the link is "active", or pointing to the current page (the language as - * well as the path must match). + * @see \Drupal\Core\Utility\LinkGeneratorInterface::generate() for details + * on the arguments, usage, and possible exceptions. * * @return string * An HTML string containing a link to the given route and parameters. - * - * @see \Drupal\Core\Routing\UrlGenerator::generateFromRoute() - * @see \Drupal\Core\Utility\LinkGenerator::generate() */ public function l($text, $route_name, array $parameters = array(), array $options = array()) { return $this->container->get('link_generator')->generate($text, $route_name, $parameters, $options); @@ -223,15 +182,29 @@ protected function languageManager() { * * @param string $route_name * The name of the route to which to redirect. - * @param array $parameters + * @param array $route_parameters * Parameters for the route. * @param int $status * The HTTP redirect status code for the redirect. The default is 302 Found. * @return \Symfony\Component\HttpFoundation\RedirectResponse * A redirect response object that may be returned by the controller. */ - public function redirect($route_name, array $parameters = array(), $status = 302) { - $url = $this->container->get('url_generator')->generate($route_name, $parameters, TRUE); + public function redirect($route_name, array $route_parameters = array(), $status = 302) { + $url = $this->container->get('url_generator')->generate($route_name, $route_parameters, TRUE); return new RedirectResponse($url, $status); } + + /** + * Generates a URL or path for a specific route based on the given parameters. + * + * @see \Drupal\Core\Routing\UrlGeneratorInterface::generateFromRoute() for + * details on the arguments, usage, and possible exceptions. + * + * @return string + * The generated URL for the given route. + */ + public function url($route_name, $route_parameters = array(), $options = array()) { + return $this->container->get('url_generator')->generateFromRoute($route_name, $route_parameters, $options); + } + } diff --git a/core/lib/Drupal/Core/Form/FormBase.php b/core/lib/Drupal/Core/Form/FormBase.php index 671fe83..a9bdede 100644 --- a/core/lib/Drupal/Core/Form/FormBase.php +++ b/core/lib/Drupal/Core/Form/FormBase.php @@ -8,6 +8,7 @@ namespace Drupal\Core\Form; use Drupal\Core\DependencyInjection\ContainerInjectionInterface; +use Drupal\Core\Routing\UrlGeneratorInterface; use Drupal\Core\StringTranslation\TranslationInterface; use Symfony\Component\DependencyInjection\ContainerInterface; use Symfony\Component\HttpFoundation\Request; @@ -32,6 +33,13 @@ protected $request; /** + * The URL generator. + * + * @var \Drupal\Core\Routing\UrlGeneratorInterface + */ + protected $urlGenerator; + + /** * {@inheritdoc} */ public static function create(ContainerInterface $container) { @@ -55,6 +63,19 @@ protected function t($string, array $args = array(), array $options = array()) { } /** + * Generates a URL or path for a specific route based on the given parameters. + * + * @see \Drupal\Core\Routing\UrlGeneratorInterface::generateFromRoute() for + * details on the arguments, usage, and possible exceptions. + * + * @return string + * The generated URL for the given route. + */ + public function url($route_name, $route_parameters = array(), $options = array()) { + return $this->getUrlGenerator()->generateFromRoute($route_name, $route_parameters, $options); + } + + /** * Gets the translation manager. * * @return \Drupal\Core\StringTranslation\TranslationInterface @@ -114,4 +135,27 @@ protected function getCurrentUser() { return $this->getRequest()->attributes->get('_account'); } + /** + * Gets the URL generator. + * + * @return \Drupal\Core\Routing\UrlGeneratorInterface + * The URL generator. + */ + protected function getUrlGenerator() { + if (!$this->urlGenerator) { + $this->urlGenerator = \Drupal::urlGenerator(); + } + return $this->urlGenerator; + } + + /** + * Sets the URL generator. + * + * @param \Drupal\Core\Routing\UrlGeneratorInterface + * The URL generator. + */ + public function setUrlGenerator(UrlGeneratorInterface $url_generator) { + $this->urlGenerator = $url_generator; + } + } diff --git a/core/modules/search/lib/Drupal/search/Form/SearchSettingsForm.php b/core/modules/search/lib/Drupal/search/Form/SearchSettingsForm.php index eb63894..5f7d1da 100644 --- a/core/modules/search/lib/Drupal/search/Form/SearchSettingsForm.php +++ b/core/modules/search/lib/Drupal/search/Form/SearchSettingsForm.php @@ -126,7 +126,7 @@ public function buildForm(array $form, array &$form_state) { '#title' => t('Number of items to index per cron run'), '#default_value' => $config->get('index.cron_limit'), '#options' => $items, - '#description' => t('The maximum number of items indexed in each pass of a cron maintenance task. If necessary, reduce the number of items to prevent timeouts and memory errors while indexing.', array('@cron' => url('admin/reports/status'))) + '#description' => t('The maximum number of items indexed in each pass of a cron maintenance task. If necessary, reduce the number of items to prevent timeouts and memory errors while indexing.', array('@cron' => $this->url('system_status'))) ); // Indexing settings: $form['indexing_settings'] = array( diff --git a/core/modules/shortcut/lib/Drupal/shortcut/Controller/ShortcutSetController.php b/core/modules/shortcut/lib/Drupal/shortcut/Controller/ShortcutSetController.php index 0e275f7..7123ae5 100644 --- a/core/modules/shortcut/lib/Drupal/shortcut/Controller/ShortcutSetController.php +++ b/core/modules/shortcut/lib/Drupal/shortcut/Controller/ShortcutSetController.php @@ -50,7 +50,7 @@ public function addShortcutLinkInline(ShortcutSetInterface $shortcut_set, Reques else { drupal_set_message(t('Unable to add a shortcut for %title.', array('%title' => $link['link_title']))); } - return new RedirectResponse($this->urlGenerator()->generateFromPath('', array('absolute' => TRUE))); + return $this->redirect(''); } throw new AccessDeniedHttpException();