Wie kann ich den aktuellen Alias und / oder Pfad in Drupal 8 erhalten?
In Drupal 7 habe ich das mit gemacht drupal_get_path_alias()
. Was ist der entsprechende Code, den ich in Drupal 8 verwenden sollte?
Wie kann ich den aktuellen Alias und / oder Pfad in Drupal 8 erhalten?
In Drupal 7 habe ich das mit gemacht drupal_get_path_alias()
. Was ist der entsprechende Code, den ich in Drupal 8 verwenden sollte?
Antworten:
Einige der anderen Antworten waren nur in früheren Alpha / Beta-Versionen von Drupal 8 korrekt oder schienen unvollständig zu sein. Ab Beta7 (und hoffentlich dauerhaft) sollten folgende Regeln gelten:
Für den aktuellen unformatierten Pfad (den nicht aliasierten Drupal-Pfad):
$current_path = \Drupal::service('path.current')->getPath()
Für die aktuelle URI , die so ziemlich eine direkte Darstellung der Anforderung ist (sie kann sogar eine Abfragezeichenfolge enthalten):
$current_uri = \Drupal::request()->getRequestUri();
Es gibt natürlich keine Garantie, dass dieser $current_uri
Wert Ihnen einen Alias gibt, auch wenn einer für die Anforderung verfügbar ist, da er nur das darstellt, was der Benutzer angefordert hat. Um also genau das zu tun, wonach Sie fragen (Alias abrufen, falls verfügbar, und Pfad, falls nicht), können Sie meines Erachtens Folgendes tun:
$current_path = \Drupal::service('path.current')->getPath();
$result = \Drupal::service('path.alias_manager')->getAliasByPath($current_path);
Natürlich ist es abhängig von der Art der Verarbeitung am besten, mit Routen anstatt mit Pfaden zu arbeiten, aber ich nehme an, das ist ein ganz anderes Thema.
::getAliasByPath()
die keine Pfadzeichenfolge ohne einen führenden Schrägstrich mehr akzeptiert (seit Beta13, glaube ich).
getAliasByPath
Gibt den Pfad ohne Sprachpräfix zurück. Irgendeine Idee, wie man das löst?
Der richtige Weg für die URL ohne den URL-Alias.
$current_path = \Drupal::service('path.current')->getPath()
\Drupal::request()->getRequestUri();
respect Drupal in einem Unterordner?
In Drupal 8 können Sie dies mit Twig tun:
{{ url('<current>') }}
Beispiel:
<a href="{{ url('<current>') }}">{{ 'Reload'|t }}</a>
von: https://www.drupal.org/docs/8/theming/twig/functions-in-twig-templates
{{ url('<current>') }}
, obwohl nicht unter Ersetzungsmuster aufgeführt.
Um den aktuellen Pfad in Drupal 7 zu erhalten, verwenden Sie current_path()
, in Drupal 8 verwenden Sie $url = Url::fromRoute('<current>');
.
current_path()
und drupal_get_path_alias()
sie sind verschiedene Funktionen.
So rufen Sie den aktuellen Pfad (Alias-Pfad) ab:
// Returns something like /about
$url = \Drupal\Core\Url::fromRoute('<current>');
So rufen Sie den aktuellen Pfad (Systempfad) ab:
// Returns node/1
$path = $url->getInternalPath();
In Zweigvorlage / Drupal 8:
URL der aktuellen Seite
{{ url('<current>') }}
nur PFAD
{{ path('<current>') }}
Siehe: https://www.drupal.org/docs/8/theming/twig/functions-in-twig-templates
Wenn Sie die absolute URL auch mit dem Querystring wollen:
use Drupal\Core\Url;
// ...
Url::fromRoute('<current>', [], ['query' => \Drupal::request()->query->all(), 'absolute' => 'true'])->toString();