You are here

public function AliasStorage::save in Drupal 8

Saves a path alias to the database.

@thrown \InvalidArgumentException Thrown when either the source or alias has not a starting slash.

Parameters

string $source: The internal system path.

string $alias: The URL alias.

string $langcode: (optional) The language code of the alias.

int|null $pid: (optional) Unique path alias identifier.

Return value

array|false FALSE if the path could not be saved or an associative array containing the following keys:

  • source (string): The internal system path with a starting slash.
  • alias (string): The URL alias with a starting slash.
  • pid (int): Unique path alias identifier.
  • langcode (string): The language code of the alias.
  • original: For updates, an array with source, alias and langcode with the previous values.

Overrides AliasStorageInterface::save

File

core/lib/Drupal/Core/Path/AliasStorage.php, line 75

Class

AliasStorage
Provides a class for CRUD operations on path aliases.

Namespace

Drupal\Core\Path

Code

public function save($source, $alias, $langcode = LanguageInterface::LANGCODE_NOT_SPECIFIED, $pid = NULL) {
  if ($source[0] !== '/') {
    throw new \InvalidArgumentException(sprintf('Source path %s has to start with a slash.', $source));
  }
  if ($alias[0] !== '/') {
    throw new \InvalidArgumentException(sprintf('Alias path %s has to start with a slash.', $alias));
  }
  if ($pid) {

    /** @var \Drupal\path_alias\PathAliasInterface $path_alias */
    $path_alias = $this
      ->getPathAliasEntityStorage()
      ->load($pid);
    $original_values = [
      'source' => $path_alias
        ->getPath(),
      'alias' => $path_alias
        ->getAlias(),
      'langcode' => $path_alias
        ->get('langcode')->value,
    ];
    $path_alias
      ->setPath($source);
    $path_alias
      ->setAlias($alias);
    $path_alias
      ->set('langcode', $langcode);
  }
  else {
    $path_alias = $this
      ->getPathAliasEntityStorage()
      ->create([
      'path' => $source,
      'alias' => $alias,
      'langcode' => $langcode,
    ]);
  }
  $path_alias
    ->save();
  $path_alias_values = [
    'pid' => $path_alias
      ->id(),
    'source' => $path_alias
      ->getPath(),
    'alias' => $path_alias
      ->getAlias(),
    'langcode' => $path_alias
      ->get('langcode')->value,
  ];
  if (isset($original_values)) {
    $path_alias_values['original'] = $original_values;
  }
  return $path_alias_values;
}