web-dev-qa-db-ja.com

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

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

Drupal 7で drupal_get_path_alias() を使用してこれを行いました。Drupal 8?

61
Yusef

他の回答の一部は、以前のアルファ/ベータバージョンDrupal 8の場合にのみ正しいか、不完全であるように見えました。 beta7の時点で(そして願わくば永続的に)、次のルールが適用されるはずです:

現在のraw path(エイリアス化されていない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);

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

116
rjacobs

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

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

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

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

例:

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

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

20

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

出典: https://www.drupal.org/node/2382211

16
Nitesh Sethia

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

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

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

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

パス(Drupal 8)だけでなく現在の完全なURLを取得するには、これが私が見つけた最もクリーンなソリューションです。

Url::fromRoute('<current>',array(),array('absolute'=>'true'))->toString();
8
crobicha

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

use Drupal\Core\Url;
// ...
Url::fromRoute('<current>', [], ['query' => \Drupal::request()->query->all(), 'absolute' => 'true'])->toString();
4
David Thomas

Twigテンプレート/ Drupal 8:

現在のページのURL

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

パスのみ

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

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

3
elektrorl