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?
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:
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_uri
valore 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.
::getAliasByPath()
non accetterà più una stringa di percorso senza una barra (dal momento che beta13 credo).
getAliasByPath
restituisce il percorso senza il prefisso della lingua. Qualche idea su come risolverlo?
Il modo corretto per l'URL senza l'alias URL.
$current_path = \Drupal::service('path.current')->getPath()
\Drupal::request()->getRequestUri();
rispetto Drupal si installa in una sottocartella?
In Drupal 8 puoi farlo con Twig:
{{ url('<current>') }}
esempio:
<a href="{{ url('<current>') }}">{{ 'Reload'|t }}</a>
da: https://www.drupal.org/docs/8/theming/twig/functions-in-twig-templates
{{ url('<current>') }}
anche se non elencato in Pattern di sostituzione.
Per ottenere il percorso corrente in Drupal 7, devi usare current_path()
, ma in Drupal 8 usi $url = Url::fromRoute('<current>');
.
current_path()
e drupal_get_path_alias()
sono funzioni diverse.
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();
In Twig template / Drupal 8:
URL della pagina corrente
{{ url('<current>') }}
solo PERCORSO
{{ path('<current>') }}
Vedi: https://www.drupal.org/docs/8/theming/twig/functions-in-twig-templates
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();