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


22

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

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

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

それは簡単なもの$node->get('path')でしょうか?

これは単純な質問のように思えますが、私はそれに関するドキュメントをまったく見つけていません。

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



これは重複している可能性があると思うので、たくさんの答えがあるリンクされた質問を確認してください。
ケビン

もう1つの質問には、OPがノードIDを認識しているノードではなく、現在のパスのパスエイリアスを取得する方法に関する回答があります。
キアマルノ

重複ではありません-現在のパスは必要ありません。任意のノードオブジェクトまたはNIDが指定されたパスが必要です。
ジャックライアン

はい、これは複製ではありません。私の答えをご覧ください。
4k4

回答:



19

Urlの使用についてはどうですか:

use Drupal\Core\Url;    

...

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

5
これとAliasManagerを使用することの主な違いは、IIRCはアウトバウンドパスプロセッサが実行されることを保証するのに対して、AliasManagerはエイリアスルックアップのみを実行することです。Urlオブジェクトをとして直接取得することもできます$node->toUrl()
mpdonadio

1
はるかに優れたソリューション。
パトリック

16

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オブジェクトのメソッドです。


9
$node->toUrl()->setAbsolute()->toString()共有などに役立つ絶対URLを返すことに注意してください
ティム

2

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

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


2

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

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

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


0

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

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

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


-5

もっと「ドルパレスク」な解決策を望んでいましたが、私が仕事をするために自分で作ったものは次のとおりです。

  function getPathFromNID($nid) {
    $db = \Drupal::database();

    $data = $db
        ->select('url_alias', 'u')
        ->fields('u', ['alias'])
        ->condition('source', '/node/' . $nid)
        ->execute()
        ->fetchField();
    return $data;
  }
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.