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でしたが、他のエイリアスも存在していました。