現在のパスエイリアスまたはパスを取得するにはどうすればよいですか?


回答:


108

その他の回答の一部は、Drupal 8の以前のアルファ版またはベータ版でのみ正しいか、不完全であると思われました。beta7(そしてできれば永久に)の時点で、次のルールが適用されるはずです。

現在の生のパス(エイリアスのないDrupalパス):

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

現在のURIの場合、これはリクエストを非常に直接表現しています(クエリ文字列を含むこともあります):

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

もちろん$current_uri、ユーザーがリクエストしたものを表すだけであるため、リクエストで利用可能なエイリアスであっても、この値がエイリアスを提供するという保証はありません。したがって、あなたが求めていることを厳密に行うには(利用可能な場合はエイリアスを取得し、利用できない場合はパスを取得します)、あなたはできると思います:

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

もちろん、実行している処理のタイプにもよりますが、パスではなくルートを使用するのが最善かもしれませんが、それはまったく別のトピックだと思います。


パスの代わりにルートを使用する方が良いと言う理由は何ですか?簡単な例/理由を教えてください。
itsdarrylnorris

@ darol100、私はそのための包括的な答えを提供するのに最適な人ではないかもしれませんが、プログラムによるURL生成のためのパスの使用はDrupal 8で公式に減価されていることを伝えることができます-drupal.org/node/2046643を参照してください。symfonyルートは、パス構造に依存しないリソースをマップするためのより堅牢な方法を提供します(ルートを使用してリンクを構築する場合、URLリンク/パターンが変更されてもリンクは機能し続けます)。
rjacobs

::getAliasByPath()先行するスラッシュなしのパス文字列を受け入れなくなるメモ(beta13が信じられているため)。
othermachines

5
getAliasByPath言語接頭辞なしでパスを返します。これを解決する方法はありますか?
フィリップマイケル

1
小枝テンプレート内からはどうですか?
EAT

35

URLエイリアスのないURLの適切な方法。

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

ない\Drupal::request()->getRequestUri();尊敬Drupalはサブフォルダにインストールされますか?
ブライアン14

現在のパスではない場合はどうすればよいですか?文字列から取得する方法はありますか?
BrandenB171

mydrupalsite.org/node/123などの絶対パスを取得するにはどうすればよいですか?
mcaleaa

1
グローバル$ base_root; $ current_uri = \ Drupal :: request()-> getRequestUri(); $ current_path = $ base_root。$ current_uri;
oknate 16

18

Drupal 8では、Twigでこれを行うことができます。

{{ url('<current>') }}

例:

<a href="{{ url('<current>') }}">{{ 'Reload'|t }}</a>

from:https : //www.drupal.org/docs/8/theming/twig/functions-in-twig-templates


1
@ nicola-de-lazzariのすばらしい発見-また、Viewsでも答えが機能します。[表示]> [フィールド]> [結果の書き換え]> [ {{ url('<current>') }}置換パターン]にリストされていなくても、リンクパスは受け入れます。
ピエト

16

Drupal 7で現在のパスを取得するには、を使用しますcurrent_path()が、Drupal 8ではを使用します$url = Url::fromRoute('<current>');

ソース:https : //www.drupal.org/node/2382211


current_path()そしてdrupal_get_path_alias()それらは異なる機能です。
itsdarrylnorris

このバージョンでは、言語接頭辞付きのパスが提供されるため、これが答えになるはずです。
ギヨームボワ

OPはdrupal_get_path_alias()に相当するD8を要求しています。D7 'node /'からのエイリアスパスではなく、現在のパスを返しています。$ nid
macjules

9

現在のパス(エイリアスパス)を取得するには:

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

現在のパス(システムパス)を取得するには:

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

7

Drupal 8の場合、これは私が見つけることができた最もクリーンなソリューションです。

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

5
\Drupal\Core\Url::fromRoute('<current>', [], ['absolute' => 'true'])->toString()
レイマンス16


2

クエリ文字列を含む絶対URLも必要な場合:

use Drupal\Core\Url;
// ...
Url::fromRoute('<current>', [], ['query' => \Drupal::request()->query->all(), 'absolute' => 'true'])->toString();
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.