web-dev-qa-db-fra.com

Comment puis-je obtenir l'alias ou le chemin d'accès actuel?

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?

61
Yusef

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.

116
rjacobs

La bonne façon pour l'URL sans l'alias d'URL.

$current_path = \Drupal::service('path.current')->getPath()
35
Daniel Wehner

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

20
Nicola De Lazzari

Pour obtenir le chemin actuel dans Drupal 7, vous utilisez pour utiliser current_path(), mais dans Drupal 8 vous utilisez $url = Url::fromRoute('<current>');.

Source: https://www.drupal.org/node/2382211

16
Nitesh Sethia

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();
9
Rahul Baisane

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();
8
crobicha

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();
4
David Thomas

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

3
elektrorl