nidを取得できるようにしたいのですが、持っている情報はhttp://example.com/this-is-the-aliasのみです。
ページにいない場合、そのエイリアスの/ node / *の内部パスを取得する方法はありますか?または、そのエイリアスからnidをすぐに取得する方法はありますか?
nidを取得できるようにしたいのですが、持っている情報はhttp://example.com/this-is-the-aliasのみです。
ページにいない場合、そのエイリアスの/ node / *の内部パスを取得する方法はありますか?または、そのエイリアスからnidをすぐに取得する方法はありますか?
回答:
直接的な機能があるかどうかはわかりませんが、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]);
}次のコードを使用して、エンティティを取得およびロードし、その値にアクセスできます。
  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);
$pathはと等しい場合があり/this-is-the-aliasます。かつてルートパス(node/{id})が別のエイリアス#migrationstrugglesでしたが、他のエイリアスも存在していました。