Comment puis-je obtenir l'alias et/ou le chemin d'accès actuel dans Drupal 8?
Dans Drupal 7 je l'ai fait avec drupal_get_path_alias()
. Quel est le code équivalent que je devrais utiliser dans Drupal 8?
Certaines des autres réponses n'étaient correctes que lors des versions alpha/bêta précédentes de Drupal 8, ou semblaient incomplètes. À partir de la version beta7 (et, espérons-le, de façon permanente), les règles suivantes devraient s'appliquer:
Pour le chemin brut --- path (le chemin non --- Drupal):
$current_path = \Drupal::service('path.current')->getPath();
Pour le URI actuel, qui est à peu près une représentation directe de la demande (il peut même inclure une chaîne de requête):
$current_uri = \Drupal::request()->getRequestUri();
Il n'y a bien sûr aucune garantie que ce $current_uri
value vous donnera un alias, même s'il est disponible pour la demande, car il ne représente que ce que l'utilisateur a demandé. Donc, pour faire strictement ce que vous demandez (obtenez un alias si disponible et un chemin sinon), je pense que vous pourriez faire:
$current_path = \Drupal::service('path.current')->getPath();
$result = \Drupal::service('path.alias_manager')->getAliasByPath($current_path);
Bien sûr, selon le type de traitement que vous effectuez, il peut être préférable de travailler avec des routes plutôt qu'avec des chemins, mais je suppose que c'est un tout autre sujet.
La bonne façon pour l'URL sans l'alias d'URL.
$current_path = \Drupal::service('path.current')->getPath()
Dans Drupal 8 vous pouvez le faire avec Twig:
{{ url('<current>') }}
exemple:
<a href="{{ url('<current>') }}">{{ 'Reload'|t }}</a>
de: https://www.drupal.org/docs/8/theming/twig/functions-in-twig-templates
Pour obtenir le chemin actuel dans Drupal 7, vous utilisez pour utiliser current_path()
, mais dans Drupal 8 vous utilisez $url = Url::fromRoute('<current>');
.
Pour obtenir le chemin actuel (chemin aliasé):
// Returns something like /about
$url = \Drupal\Core\Url::fromRoute('<current>');
Pour obtenir le chemin actuel (chemin système):
// Returns node/1
$path = $url->getInternalPath();
Pour obtenir l'url complète actuelle, pas seulement le chemin (Drupal 8), voici la solution la plus propre que j'ai pu trouver:
Url::fromRoute('<current>',array(),array('absolute'=>'true'))->toString();
Si vous voulez aussi l'URL absolue avec la chaîne de requête:
use Drupal\Core\Url;
// ...
Url::fromRoute('<current>', [], ['query' => \Drupal::request()->query->all(), 'absolute' => 'true'])->toString();
Dans Twig template/Drupal 8:
URL de la page en cours
{{ url('<current>') }}
uniquement CHEMIN
{{ path('<current>') }}
Voir: https://www.drupal.org/docs/8/theming/twig/functions-in-twig-templates