Version 1
[yaffs-website] / web / core / lib / Drupal / Core / Breadcrumb / Breadcrumb.php
1 <?php
2
3 namespace Drupal\Core\Breadcrumb;
4
5 use Drupal\Core\Cache\RefinableCacheableDependencyInterface;
6 use Drupal\Core\Cache\RefinableCacheableDependencyTrait;
7 use Drupal\Core\Link;
8 use Drupal\Core\Render\RenderableInterface;
9
10 /**
11  * Used to return generated breadcrumbs with associated cacheability metadata.
12  */
13 class Breadcrumb implements RenderableInterface, RefinableCacheableDependencyInterface {
14
15   use RefinableCacheableDependencyTrait;
16
17   /**
18    * An ordered list of links for the breadcrumb.
19    *
20    * @var \Drupal\Core\Link[]
21    */
22   protected $links = [];
23
24   /**
25    * Gets the breadcrumb links.
26    *
27    * @return \Drupal\Core\Link[]
28    */
29   public function getLinks() {
30     return $this->links;
31   }
32
33   /**
34    * Sets the breadcrumb links.
35    *
36    * @param \Drupal\Core\Link[] $links
37    *   The breadcrumb links.
38    *
39    * @return $this
40    *
41    * @throws \LogicException
42    *   Thrown when setting breadcrumb links after they've already been set.
43    */
44   public function setLinks(array $links) {
45     if (!empty($this->links)) {
46       throw new \LogicException('Once breadcrumb links are set, only additional breadcrumb links can be added.');
47     }
48
49     $this->links = $links;
50
51     return $this;
52   }
53
54   /**
55    * Appends a link to the end of the ordered list of breadcrumb links.
56    *
57    * @param \Drupal\Core\Link $link
58    *   The link appended to the breadcrumb.
59    *
60    * @return $this
61    */
62   public function addLink(Link $link) {
63     $this->links[] = $link;
64
65     return $this;
66   }
67
68   /**
69    * {@inheritdoc}
70    */
71   public function toRenderable() {
72     $build = [
73       '#cache' => [
74         'contexts' => $this->cacheContexts,
75         'tags' => $this->cacheTags,
76         'max-age' => $this->cacheMaxAge,
77       ],
78     ];
79     if (!empty($this->links)) {
80       $build += [
81         '#theme' => 'breadcrumb',
82         '#links' => $this->links,
83       ];
84     }
85     return $build;
86   }
87
88 }