You are here

public function AliasManager::getPathByAlias in Drupal 10

Same name and namespace in other branches
  1. 9 core/modules/path_alias/src/AliasManager.php \Drupal\path_alias\AliasManager::getPathByAlias()

File

core/modules/path_alias/src/AliasManager.php, line 150

Class

AliasManager
The default alias manager implementation.

Namespace

Drupal\path_alias

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_alias = $this->pathAliasRepository
    ->lookupByAlias($alias, $langcode)) {
    $this->lookupMap[$langcode][$path_alias['path']] = $alias;
    return $path_alias['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;
}