Wie erhalte ich den aktuellen Pfadalias oder -pfad?


56

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:


108

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_uriWert 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.


Warum erwähnen Sie, dass es besser ist, Routen anstelle von Pfaden zu verwenden? Können Sie ein kurzes Beispiel / einen Grund nennen?
itsdarrylnorris

@ darol100, ich bin vielleicht nicht der Beste, der eine umfassende Antwort darauf gibt, aber ich kann Ihnen sagen, dass die Verwendung von Pfaden für die programmatische URL-Generierung in Drupal 8 offiziell abgeschrieben ist - siehe: drupal.org/node/2046643 . Symfony-Routen bieten eine robustere Möglichkeit, Ressourcen unabhängig von den Pfadstrukturen zuzuordnen (wenn Sie einen Link mithilfe von Routen erstellen, funktioniert dieser Link auch dann, wenn sich der URL-Pfad / das URL-Muster ändert).
RJACOBS

Nur eine Anmerkung, ::getAliasByPath()die keine Pfadzeichenfolge ohne einen führenden Schrägstrich mehr akzeptiert (seit Beta13, glaube ich).
othermachines

5
getAliasByPathGibt den Pfad ohne Sprachpräfix zurück. Irgendeine Idee, wie man das löst?
Philipp Michael

1
Was ist mit einer Zweigvorlage?
ESSEN

35

Der richtige Weg für die URL ohne den URL-Alias.

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

Installiert \Drupal::request()->getRequestUri();respect Drupal in einem Unterordner?
Brian

Wie würde ich das für einen nicht aktuellen Pfad tun? Gibt es eine Möglichkeit, es nur aus einer Zeichenfolge zu erhalten?
BrandenB171

Wie erhalte ich den absoluten Pfad wie diesen: mydrupalsite.org/node/123 ?
mcaleaa

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


16

Um den aktuellen Pfad in Drupal 7 zu erhalten, verwenden Sie current_path(), in Drupal 8 verwenden Sie $url = Url::fromRoute('<current>');.

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


current_path()und drupal_get_path_alias()sie sind verschiedene Funktionen.
itsdarrylnorris

Dies sollte die Antwort sein, da diese Version den Pfad mit dem Sprachpräfix angibt.
Guillaume Bois

Das OP fragt nach dem D8-Äquivalent von drupal_get_path_alias (). Sie sind den aktuellen Pfad zurückkehrt und nicht das aliased Pfad vom Knoten‘D7 /'.$ nid
macjules

9

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

7

Für Drupal 8 ist dies die sauberste Lösung, die ich finden konnte:

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

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


2

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();
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.