Dưới đây là một số ví dụ về việc tạo liên kết trong Drupal 8. Lưu ý rằng $ this-> t ('some text') có sẵn trong các khối mở rộng BlockBase. Nếu bạn sao chép chúng sang một lớp khác không có hoặc sử dụng chúng trong tệp .module, bạn có thể cần phải thay đổi chúng thành t () 1 .
Liên kết cơ bản đến một nút:
$node = Node::load($nid);
$build['node_link'] = $node->toLink()->toRenderable();
Điều này tạo ra một mảng render như thế này:
$link = [
'#type' => 'link',
'#url' => $url_object,
'#title' => 'Title of Node',
];
Bạn có thể tạo mảng kết xuất mà không cần tải nút theo cách này:
$url_object = Url::fromRoute('entity.node.canonical', ['node' => $nid]);
$link = [
'#type' => 'link',
'#url' => $url_object,
'#title' => $this->t('Read More'),
];
Hoặc sử dụng lớp Liên kết lõi:
$url = Url::fromRoute('entity.node.canonical', ['node' => $nid]);
$link = Link::fromTextAndUrl($this->t('Read more'), $url);
$build['read_more'] = $link->toRenderable();
Nếu bạn muốn sử dụng đánh dấu trong văn bản của liên kết của mình, bạn không thể chỉ cần đặt một chuỗi. Bạn cần sử dụng một phần tử mảng kết xuất:
$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);
Để tạo một liên kết tuyệt đối, bạn thêm tùy chọn này vào URL, không phải liên kết:
$url = Url::fromRoute('entity.node.canonical', ['node' => $nid], ['absolute' => TRUE]);
$link = Link::fromTextAndUrl($this->t('Read more'), $url);
$build['read_more'] = $link->toRenderable();
Để thêm một lớp vào liên kết của bạn, bạn cũng cần thêm lớp này vào URL, không phải liên kết:
$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();
Để thêm một chuỗi truy vấn vào liên kết của bạn, bạn cũng cần phải vào chuỗi này, không phải liên kết:
$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();
Để đặt liên kết mở trong cửa sổ mới với 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();
Đây là một liên kết đến một trang thuật ngữ phân loại:
$url = Url::fromRoute('entity.taxonomy_term.canonical', ['taxonomy_term' => $tid]);
$link = Link::fromTextAndUrl($this->t('Read more'), $url);
$build['read_more'] = $link->toRenderable();
Đây là một liên kết đến trang chỉnh sửa nút:
$url = Url::fromRoute('entity.node.edit_form', ['node' => $nid]);
$link = Link::fromTextAndUrl($this->t('Edit'), $url);
$build['read_more'] = $link->toRenderable();
Để tạo một liên kết bên ngoài:
$url = Url::fromUri('http://www.example.com/');
$link = Link::fromTextAndUrl($this->t('Vist this example site'), $url);
$build['external_link'] = $link->toRenderable();
Liên kết đến trang chủ:
$url = Url::fromRoute('<front>');
$link = Link::fromTextAndUrl($this->t('Home'), $url);
$build['homepage_link'] = $link->toRenderable();
Lưu ý rằng trên bất kỳ đối tượng url nào, bạn có thể lấy url dưới dạng chuỗi bằng cách gọi:
$url->toString();
Ví dụ:
$url_string = Url::fromRoute('<front>')->toString();