Drupal 8でリンクを作成する例を次に示します。$ this-> t( 'some text')は、BlockBaseを拡張するブロック内で使用できることに注意してください。これらを持たない別のクラスにこれらをコピーするか、.moduleファイルで使用する場合、これをt()1に変更する必要があります。
ノードへの基本リンク:
$node = Node::load($nid);
$build['node_link'] = $node->toLink()->toRenderable();
これにより、次のようなレンダー配列が作成されます。
$link = [
'#type' => 'link',
'#url' => $url_object,
'#title' => 'Title of Node',
];
この方法でノードをロードせずにレンダー配列を作成できます。
$url_object = Url::fromRoute('entity.node.canonical', ['node' => $nid]);
$link = [
'#type' => 'link',
'#url' => $url_object,
'#title' => $this->t('Read More'),
];
または、コアリンククラスを使用します。
$url = Url::fromRoute('entity.node.canonical', ['node' => $nid]);
$link = Link::fromTextAndUrl($this->t('Read more'), $url);
$build['read_more'] = $link->toRenderable();
リンクのテキストでマークアップを使用する場合は、単に文字列を挿入することはできません。レンダー配列要素を使用する必要があります。
$url = Url::fromRoute('entity.node.canonical', ['node' => $nid]);
$link_text = [
'#type' => 'html_tag',
'#tag' => 'span',
'#value' => $this->t('Load More'),
];
$link = Link::fromTextAndUrl($link_text, $url);
絶対リンクを作成するには、このオプションをリンクではなくURLに追加します。
$url = Url::fromRoute('entity.node.canonical', ['node' => $nid], ['absolute' => TRUE]);
$link = Link::fromTextAndUrl($this->t('Read more'), $url);
$build['read_more'] = $link->toRenderable();
クラスをリンクに追加するには、これをリンクではなくURLに追加する必要もあります。
$options = [
'attributes' => [
'class' => [
'read-more-link',
],
],
];
$url = Url::fromRoute('entity.node.canonical', ['node' => $nid], $options);
$link = Link::fromTextAndUrl($this->t('Read more'), $url);
$build['read_more'] = $link->toRenderable();
リンクにクエリ文字列を追加するには、リンクではなくURLにこれを追加する必要があります。
$options = [
'query' => [
'car' => 'BMW',
'model' => 'mini-cooper',
],
'attributes' => [
'class' => [
'read-more-link',
],
],
];
$url = Url::fromRoute('entity.node.canonical', ['node' => $nid], $options);
$link = Link::fromTextAndUrl($this->t('Read more'), $url);
$build['read_more'] = $link->toRenderable();
target = _blankで新しいウィンドウで開くようにリンクを設定するには:
$options = [
'attributes' => [
'target' => '_blank'
],
];
$url = Url::fromRoute('entity.media.edit_form', ['media' => $entity->id()], $options);
$link = Link::fromTextAndUrl(t('Edit'), $url);
$form['entity']['edit_link'] = $link->toRenderable();
分類用語ページへのリンクは次のとおりです。
$url = Url::fromRoute('entity.taxonomy_term.canonical', ['taxonomy_term' => $tid]);
$link = Link::fromTextAndUrl($this->t('Read more'), $url);
$build['read_more'] = $link->toRenderable();
ノード編集ページへのリンクは次のとおりです。
$url = Url::fromRoute('entity.node.edit_form', ['node' => $nid]);
$link = Link::fromTextAndUrl($this->t('Edit'), $url);
$build['read_more'] = $link->toRenderable();
外部リンクを作成するには:
$url = Url::fromUri('http://www.example.com/');
$link = Link::fromTextAndUrl($this->t('Vist this example site'), $url);
$build['external_link'] = $link->toRenderable();
ホームページへのリンク:
$url = Url::fromRoute('<front>');
$link = Link::fromTextAndUrl($this->t('Home'), $url);
$build['homepage_link'] = $link->toRenderable();
これらのurlオブジェクトのいずれかで、次を呼び出してURLを文字列として取得できることに注意してください。
$url->toString();
例えば:
$url_string = Url::fromRoute('<front>')->toString();