web-dev-qa-db-ja.com

NID(またはノードオブジェクト)からパスエイリアスを取得する

ノードオブジェクトがあり、それを使用してDrupal 8.の特定のパスを取得しようとしています。

Drupal 7にはdrupal_lookup_path()がありましたが、Drupal 8.に相当するものやドキュメントはありません。

ノードオブジェクトからパスを取得するための新しい「Drupal」方法は何ですか?

$node->get('path')のような単純なものでしょうか?

これは簡単な質問のように見えますが、ドキュメントはまったく見つかりません。

現在のパスのパスエイリアスが必要ないことに注意してください。ノードオブジェクトまたはノードIDを指定して、任意のノードのパスエイリアスが必要です。

27
Jack Ryan

ノードIDのパスを取得するには、 AliasManager :: getAliasByPath を使用します。

$alias = \Drupal::service('path.alias_manager')->getAliasByPath('/node/'.$nid);
54
4k4

rl の使用について:

use Drupal\Core\Url;    

...

$url = Url::fromRoute('entity.node.canonical', ['node' => $nid])->toString();
20
Kevin

Nidしかない場合は、4k4のソリューション

$alias = \Drupal::service('path.alias_manager')->getAliasByPath('/node/'.$nid);

よく働く。ただし、ノードオブジェクトが既にある場合は、1つまたは2つのステップをスキップできます。ノードには実際には、URLを取得するための組み込みメソッドがあります。

$node->toUrl()->toString();

ノードのエイリアスされたURLを返します。

toUrl()はurlオブジェクトを返します。こちらをご覧ください https://api.drupal.org/api/drupal/core%21lib%21Drupal%21Core%21Url.php/class/Url/8.2.x

toString()は、URLの文字列表現を返すurlオブジェクトのメソッドです。

16
Matt

ノードオブジェクトからノードURLを取得する最良の方法

  • 絶対パス:$ node-> toUrl()-> setAbsolute()-> toString();
  • 相対パス:$ node-> toUrl()-> toString();

ノード言語も処理します。

3
Prem Patel

_path.alias_storage_のloadメソッドを使用して、エイリアスの詳細の配列を返すこともできます。そのノードのパスが見つからなかった場合はブール値のfalseを返すこともできます。

$aliasArray = \Drupal::service('path.alias_storage')->load(['source' => '/node/' . $nid]);

2
rchaplin

languagesでノードエイリアスURLを取得する場合は、このような言語を使用することを忘れないでください。

$alias_url = \Drupal::service('path.alias_manager')->getAliasByPath('/node/'. $nid, $langcode);

クラスで使用している場合は、依存関係注入を正しく使用することを忘れないでください。

1