Drupal 8 & Drupal 9 - Créer un Alias d'URL dans le code

Les alias d'url sont des URI « propres » faisant référence à une URI système. Exemple pour ce contenu, l'alias est /snippets/2016/drupal-8-drupal-9-creer-un-alias-durl-dans-le-code.html et le chemin système est : /node/166.

Voici comment jouer avec les alias d'url dans drupal 8 et 9 :

Pour drupal 8.8.x+ et drupal 9

Tester si un alias existe pour un chemin système

// Il est évidement préférable d'utiliser l'injection de dépendance pour récupérer le service AliasManager quand c'est possible.
$aliasManager = \Drupal::service('path.alias_manager');

$chemin_system = '/node/166';
$langcode = 'fr';
// Si un alias n'existe pas, alors la méthode suivante nous retourne le chemin système qu'on lui a passé
// note : le 3e paramètre $langcode est optionnel
$alias = $aliasManager->getAliasByPath($chemin_system, $langcode);
if ($urlAlias && $urlAlias !== $path_alias) {
  // Pas d'alias existant
}
else {
  // Un alias existe
}

Créer un alias

$system_path = '/node/166';
$path_alias = '/mon-alias.html'
$langcode = 'fr'
$alias = Drupal\path_alias\Entity\PathAlias::create(['path' => $system_path, 'alias' => $path_alias, 'langcode' => $langcode]);
$alias->save();

Pour drupal 8.7.x et inférieur

Tester si un alias existe pour un chemin système

// On récupère le service alias manager
$alias_manager = \Drupal::service('path.alias_manager');

$chemin_systeme = "/node/5"
$alias = $alias_manager->getAliasByPath($chemin_systeme);

Note, si un alias n'existe pas pour le chemin système alors la méthode nous retournera le chemin système, sinon elle nous retournera l'alias.

Créer un alias

// On récupère le service alias storage cette fois
$alias_storage = \Drupal::service('path.alias_storage');

$chemin_systeme = "/node/5"
$alias_voulu = "/mon-super-chemin.html"
$alias_storage->save($chemin_systeme, $alias_voulu);

Plus d'informations sur drupal.org : https://www.drupal.org/node/1853148

Commentaires

Merci pour cet article,
Je me posais la question suivante, est-il possible de générer un alias d'URL avec des paramètres du style :
/recherche-ref?dossier=867 qui donnerait /recherche-ref/[node:title] ?

Ajouter un commentaire

Ne sera pas publié
CAPTCHA
Désolé, pour ça, mais c'est le seul moyen pour éviter le spam...