Comment puis-je obtenir le pseudonyme et / ou le chemin 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?
Comment puis-je obtenir le pseudonyme et / ou le chemin 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?
Réponses:
Certaines des autres réponses n'étaient correctes que lors des précédentes versions alpha / bêta de Drupal 8, ou semblaient être incomplètes. À partir de la version 7 (et, espérons-le, de façon permanente), les règles suivantes devraient s'appliquer:
Pour le chemin brut actuel (le chemin Drupal sans aliasing):
$current_path = \Drupal::service('path.current')->getPath()
Pour l' 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();
Bien entendu, rien ne garantit que cette $current_uri
valeur vous donnera un alias, même s'il en existe un pour la requête, car il ne représente que ce que l'utilisateur a demandé. Donc, pour faire strictement ce que vous demandez (obtenir 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 itinéraires plutôt que des chemins, mais je suppose que c'est un tout autre sujet.
::getAliasByPath()
n'acceptera plus une chaîne de chemin sans slash (depuis beta13 je crois).
getAliasByPath
renvoie le chemin sans préfixe de langue. Aucune idée sur la façon de résoudre ça?
La manière appropriée pour l'URL sans l'alias d'URL.
$current_path = \Drupal::service('path.current')->getPath()
\Drupal::request()->getRequestUri();
ce que respect Drupal installe dans un sous-dossier?
Dans Drupal 8, vous pouvez le faire avec Twig:
{{ url('<current>') }}
exemple:
<a href="{{ url('<current>') }}">{{ 'Reload'|t }}</a>
à partir de: https://www.drupal.org/docs/8/theming/twig/functions-in-twig-templates
{{ url('<current>') }}
même s'il n'est pas répertorié sous Modèles de remplacement.
Pour obtenir le chemin actuel dans Drupal 7, vous utilisez current_path()
, mais dans Drupal 8, vous utilisez $url = Url::fromRoute('<current>');
.
current_path()
et drupal_get_path_alias()
ce sont des fonctions différentes.
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();
Dans le modèle Twig / Drupal 8:
URL de la page en cours
{{ url('<current>') }}
seulement CHEMIN
{{ path('<current>') }}
Voir: https://www.drupal.org/docs/8/theming/twig/functions-in-twig-templates
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();