パスエイリアスからノードIDを取得するにはどうすればよいですか?


17

nidを取得できるようにしたいのですが、持っている情報はhttp://example.com/this-is-the-aliasのみです。

ページにいない場合、そのエイリアスの/ node / *の内部パスを取得する方法はありますか?または、そのエイリアスからnidをすぐに取得する方法はありますか?

回答:


25

直接的な機能があるかどうかはわかりませんが、1つの方法は、パスエイリアスマネージャーサービスを使用して内部パスを検索し、有効なノードIDを正規表現してオブジェクトのロードを実行することです:

$path = \Drupal::service('path.alias_manager')->getPathByAlias('/this-is-the-alias');
if(preg_match('/node\/(\d+)/', $path, $matches)) {
  $node = \Drupal\node\Entity\Node::load($matches[1]);
}

4
何らかの理由で、$pathはと等しい場合があり/this-is-the-aliasます。かつてルートパス(node/{id})が別のエイリアス#migrationstrugglesでしたが、他のエイリアスも存在していました。
クリスハッピー

7

次のコードを使用して、エンティティを取得およびロードし、その値にアクセスできます。

  use \Drupal\Core\Url;

  $alias = \Drupal::service('path.alias_manager')->getPathByAlias('/etapes-de-la-vie');

  $params = Url::fromUri("internal:" . $alias)->getRouteParameters();
  $entity_type = key($params);
  $node = \Drupal::entityTypeManager()->getStorage($entity_type)->load($params[$entity_type]);
  //to use dpm you need the devel module
  dpm($node->nid->value);

参照資料


1

develモジュールをインストールしてから、develツールバー項目Current route infoを使用します。

これにより、このURLが生成されます。このURLを直接入力し、drupalインストールで既知の任意のパスをクエリパラメーターとして提供できます。

/devel/routes/item?path=alias

ノードの場合、リストされたルート変数の最後にある生のパラメーターでノードIDを見つけます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.