web-dev-qa-db-ja.com

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

Nidを取得したいのですが、持っている唯一の情報は http://example.com/this-is-the-alias です。

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

18
BrandenB171

直接関数があるかどうかはわかりませんが、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]);
}
25
Shawn Conn

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

  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);

参考文献

7

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

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

/devel/routes/item?path=alias

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

1
4k4