Drupal 8)で現在のエイリアスやパスを取得するにはどうすればよいですか?
Drupal 7で drupal_get_path_alias()
を使用してこれを行いました。Drupal 8?
他の回答の一部は、以前のアルファ/ベータバージョン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);
もちろん、実行している処理のタイプによっては、パスではなくルートを使用するのが最善の場合もありますが、それはまったく別のトピックだと思います。
URLエイリアスのないURLの適切な方法。
$current_path = \Drupal::service('path.current')->getPath()
Drupal 8では、Twigでこれを行うことができます:
{{ url('<current>') }}
例:
<a href="{{ url('<current>') }}">{{ 'Reload'|t }}</a>
から: https://www.drupal.org/docs/8/theming/twig/functions-in-twig-templates
Drupal 7の現在のパスを取得するには、current_path()
を使用しますが、Drupal 8の場合は$url = Url::fromRoute('<current>');
を使用します。
現在のパス(エイリアスパス)を取得するには:
// Returns something like /about
$url = \Drupal\Core\Url::fromRoute('<current>');
現在のパス(システムパス)を取得するには:
// Returns node/1
$path = $url->getInternalPath();
パス(Drupal 8)だけでなく現在の完全なURLを取得するには、これが私が見つけた最もクリーンなソリューションです。
Url::fromRoute('<current>',array(),array('absolute'=>'true'))->toString();
クエリ文字列を含む絶対URLも必要な場合:
use Drupal\Core\Url;
// ...
Url::fromRoute('<current>', [], ['query' => \Drupal::request()->query->all(), 'absolute' => 'true'])->toString();
Twigテンプレート/ Drupal 8:
現在のページのURL
{{ url('<current>') }}
パスのみ
{{ path('<current>') }}
参照: https://www.drupal.org/docs/8/theming/twig/functions-in-twig-templates