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);
Develモジュールをインストールしてから、develツールバー項目Current route infoを使用します。
これにより、このURLが生成されます。このURLに直接入力して、drupalインストールで既知のパスをクエリパラメータとして指定できます。
/devel/routes/item?path=alias
それがノードである場合、リストされたルート変数の最後のrawパラメータでノードIDを見つけます。