ノードオブジェクトがあり、それを使用してDrupal 8.の特定のパスを取得しようとしています。
Drupal 7にはdrupal_lookup_path()
がありましたが、Drupal 8.に相当するものやドキュメントはありません。
ノードオブジェクトからパスを取得するための新しい「Drupal」方法は何ですか?
$node->get('path')
のような単純なものでしょうか?
これは簡単な質問のように見えますが、ドキュメントはまったく見つかりません。
現在のパスのパスエイリアスが必要ないことに注意してください。ノードオブジェクトまたはノードIDを指定して、任意のノードのパスエイリアスが必要です。
ノードIDのパスを取得するには、 AliasManager :: getAliasByPath を使用します。
$alias = \Drupal::service('path.alias_manager')->getAliasByPath('/node/'.$nid);
rl の使用について:
use Drupal\Core\Url;
...
$url = Url::fromRoute('entity.node.canonical', ['node' => $nid])->toString();
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オブジェクトのメソッドです。
ノードオブジェクトからノードURLを取得する最良の方法
ノード言語も処理します。
_path.alias_storage
_のloadメソッドを使用して、エイリアスの詳細の配列を返すこともできます。そのノードのパスが見つからなかった場合はブール値のfalseを返すこともできます。
$aliasArray = \Drupal::service('path.alias_storage')->load(['source' => '/node/' . $nid]);
languagesでノードエイリアスURLを取得する場合は、このような言語を使用することを忘れないでください。
$alias_url = \Drupal::service('path.alias_manager')->getAliasByPath('/node/'. $nid, $langcode);
クラスで使用している場合は、依存関係注入を正しく使用することを忘れないでください。