Come posso ottenere l'attuale alias o percorso?


56

Come posso ottenere l'attuale alias e / o percorso in Drupal 8?

In Drupal 7 l'ho fatto con drupal_get_path_alias(). Qual è il codice equivalente che dovrei usare in Drupal 8?

Risposte:


108

Alcune delle altre risposte erano corrette solo durante le precedenti versioni alpha / beta di Drupal 8 o sembravano essere incomplete. A partire da beta7 (e si spera in modo permanente), dovrebbero essere applicate le seguenti regole:

Per il percorso raw corrente (il percorso Drupal senza alias):

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

Per l' URI corrente , che è praticamente una rappresentazione diretta della richiesta (può anche includere una stringa di query):

$current_uri = \Drupal::request()->getRequestUri();

Naturalmente non esiste alcuna garanzia che questo $current_urivalore ti dia un alias, anche se uno è disponibile per la richiesta, poiché rappresenta solo ciò che l'utente ha richiesto. Quindi, per fare rigorosamente quello che stai chiedendo (ottenere alias se disponibile e percorso in caso contrario) penso che potresti fare:

$current_path = \Drupal::service('path.current')->getPath();
$result = \Drupal::service('path.alias_manager')->getAliasByPath($current_path);

Naturalmente, a seconda del tipo di elaborazione che stai eseguendo, potrebbe essere meglio lavorare con route anziché con percorsi, ma suppongo che sia un argomento completamente diverso.


perché dici che sarebbe meglio usare percorsi invece di percorsi? Potete fornire un breve esempio / motivo?
itsdarrylnorris,

@ darol100, potrei non essere la persona migliore per fornire una risposta esaustiva, ma posso dirti che l'uso di percorsi per la generazione di URL programmatici è ufficialmente deprezzato in Drupal 8 - vedi: drupal.org/node/2046643 . I percorsi di symfony forniscono un modo più affidabile per mappare le risorse indipendentemente dalle strutture del percorso (se si crea un collegamento utilizzando i percorsi, quel collegamento continuerà a funzionare anche se il percorso / modello URL cambia).
rjacobs,

Solo una nota che ::getAliasByPath()non accetterà più una stringa di percorso senza una barra (dal momento che beta13 credo).
macchine,

5
getAliasByPathrestituisce il percorso senza il prefisso della lingua. Qualche idea su come risolverlo?
Philipp Michael,

1
che dire dall'interno di un modello di ramoscello?
Mangia il

35

Il modo corretto per l'URL senza l'alias URL.

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

Non \Drupal::request()->getRequestUri();rispetto Drupal si installa in una sottocartella?
Brian

come lo farei per un percorso non attuale? c'è un modo per ottenerlo da una sola stringa?
BrandenB171,

Come posso ottenere il percorso assoluto, come questo: mydrupalsite.org/node/123 ?
mcaleaa,

1
global $ base_root; $ current_uri = \ Drupal :: request () -> getRequestUri (); $ current_path = $ base_root. $ current_uri;
Oknate


16

Per ottenere il percorso corrente in Drupal 7, devi usare current_path(), ma in Drupal 8 usi $url = Url::fromRoute('<current>');.

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


current_path()e drupal_get_path_alias()sono funzioni diverse.
itsdarrylnorris,

Questa dovrebbe essere la risposta poiché questa versione fornisce il percorso con il prefisso della lingua.
Guillaume Bois,

L'OP chiede l'equivalente D8 di drupal_get_path_alias (). Stai restituendo il percorso corrente e NON il percorso con alias dal D7 'node /'.$ nid
macjules

9

Per ottenere il percorso corrente (percorso con alias):

// Returns something like /about
$url = \Drupal\Core\Url::fromRoute('<current>');

Per ottenere il percorso corrente (percorso di sistema):

// Returns node/1
$path = $url->getInternalPath();

7

Per Drupal 8, questa è la soluzione più pulita che sono riuscito a trovare:

Url::fromRoute('<current>',array(),array('absolute'=>'true'));

5
\Drupal\Core\Url::fromRoute('<current>', [], ['absolute' => 'true'])->toString()
leymannx,


2

Se vuoi l'URL assoluto anche con la stringa di query:

use Drupal\Core\Url;
// ...
Url::fromRoute('<current>', [], ['query' => \Drupal::request()->query->all(), 'absolute' => 'true'])->toString();
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.