You are here

public function HelpTwigExtension::getRouteLink in Drupal 10

Same name and namespace in other branches
  1. 9 core/modules/help_topics/src/HelpTwigExtension.php \Drupal\help_topics\HelpTwigExtension::getRouteLink()

Returns a link or plain text, given text, route name, and parameters.

Parameters

string $text: The link text.

string $route: The name of the route.

array $parameters: (optional) An associative array of route parameter names and values.

array $options: (optional) An associative array of additional options. The 'absolute' option is forced to be TRUE.

Return value

array A render array with a generated absolute link to the given route. If the user does not have permission for the route, or an exception occurs, such as a missing route or missing parameters, the render array is for the link text as a plain string instead.

See also

\Drupal\Core\Template\TwigExtension::getUrl()

File

core/modules/help_topics/src/HelpTwigExtension.php, line 85

Class

HelpTwigExtension
Defines and registers Drupal Twig extensions for rendering help topics.

Namespace

Drupal\help_topics

Code

public function getRouteLink(string $text, string $route, array $parameters = [], array $options = []) : array {
  assert($this->accessManager instanceof AccessManagerInterface, "The access manager hasn't been set up. Any configuration YAML file with a service directive dealing with the Twig configuration can cause this, most likely found in a recently installed or changed module.");
  $bubbles = new BubbleableMetadata();
  $bubbles
    ->addCacheTags([
    'route_match',
  ]);
  try {
    $access_object = $this->accessManager
      ->checkNamedRoute($route, $parameters, NULL, TRUE);
    $bubbles
      ->addCacheableDependency($access_object);
    if ($access_object
      ->isAllowed()) {
      $options['absolute'] = TRUE;
      $url = Url::fromRoute($route, $parameters, $options);

      // Generate the URL to check for parameter problems and collect
      // cache metadata.
      $generated = $url
        ->toString(TRUE);
      $bubbles
        ->addCacheableDependency($generated);
      $build = [
        '#title' => $text,
        '#type' => 'link',
        '#url' => $url,
      ];
    }
    else {

      // If the user doesn't have access, return the link text.
      $build = [
        '#markup' => $text,
      ];
    }
  } catch (RouteNotFoundException|MissingMandatoryParametersException|InvalidParameterException $e) {

    // If the route had one of these exceptions, return the link text.
    $build = [
      '#markup' => $text,
    ];
  }
  $bubbles
    ->applyTo($build);
  return $build;
}