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