You are here

public function AliasManager::getPathByAlias in Zircon Profile 8

Same name and namespace in other branches
  1. 8.0 core/lib/Drupal/Core/Path/AliasManager.php \Drupal\Core\Path\AliasManager::getPathByAlias()

Given the alias, return the path it represents.

Parameters

string $alias: An alias.

string $langcode: An optional language code to look up the path in.

Return value

string The path represented by alias, or the alias if no path was found.

Throws

\InvalidArgumentException Thrown when the path does not start with a slash.

Overrides AliasManagerInterface::getPathByAlias

File

core/lib/Drupal/Core/Path/AliasManager.php, line 156
Contains \Drupal\Core\Path\AliasManager.

Class

AliasManager
The default alias manager implementation.

Namespace

Drupal\Core\Path

Code

public function getPathByAlias($alias, $langcode = NULL) {

  // If no language is explicitly specified we default to the current URL
  // language. If we used a language different from the one conveyed by the
  // requested URL, we might end up being unable to check if there is a path
  // alias matching the URL path.
  $langcode = $langcode ?: $this->languageManager
    ->getCurrentLanguage(LanguageInterface::TYPE_URL)
    ->getId();

  // If we already know that there are no paths for this alias simply return.
  if (empty($alias) || !empty($this->noPath[$langcode][$alias])) {
    return $alias;
  }

  // Look for the alias within the cached map.
  if (isset($this->lookupMap[$langcode]) && ($path = array_search($alias, $this->lookupMap[$langcode]))) {
    return $path;
  }

  // Look for path in storage.
  if ($path = $this->storage
    ->lookupPathSource($alias, $langcode)) {
    $this->lookupMap[$langcode][$path] = $alias;
    return $path;
  }

  // We can't record anything into $this->lookupMap because we didn't find any
  // paths for this alias. Thus cache to $this->noPath.
  $this->noPath[$langcode][$alias] = TRUE;
  return $alias;
}