diff core/lib/Drupal/Core/Breadcrumb/Breadcrumb.php @ 0:4c8ae668cc8c

Initial import (non-working)
author Chris Cannam
date Wed, 29 Nov 2017 16:09:58 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/lib/Drupal/Core/Breadcrumb/Breadcrumb.php	Wed Nov 29 16:09:58 2017 +0000
@@ -0,0 +1,88 @@
+<?php
+
+namespace Drupal\Core\Breadcrumb;
+
+use Drupal\Core\Cache\RefinableCacheableDependencyInterface;
+use Drupal\Core\Cache\RefinableCacheableDependencyTrait;
+use Drupal\Core\Link;
+use Drupal\Core\Render\RenderableInterface;
+
+/**
+ * Used to return generated breadcrumbs with associated cacheability metadata.
+ */
+class Breadcrumb implements RenderableInterface, RefinableCacheableDependencyInterface {
+
+  use RefinableCacheableDependencyTrait;
+
+  /**
+   * An ordered list of links for the breadcrumb.
+   *
+   * @var \Drupal\Core\Link[]
+   */
+  protected $links = [];
+
+  /**
+   * Gets the breadcrumb links.
+   *
+   * @return \Drupal\Core\Link[]
+   */
+  public function getLinks() {
+    return $this->links;
+  }
+
+  /**
+   * Sets the breadcrumb links.
+   *
+   * @param \Drupal\Core\Link[] $links
+   *   The breadcrumb links.
+   *
+   * @return $this
+   *
+   * @throws \LogicException
+   *   Thrown when setting breadcrumb links after they've already been set.
+   */
+  public function setLinks(array $links) {
+    if (!empty($this->links)) {
+      throw new \LogicException('Once breadcrumb links are set, only additional breadcrumb links can be added.');
+    }
+
+    $this->links = $links;
+
+    return $this;
+  }
+
+  /**
+   * Appends a link to the end of the ordered list of breadcrumb links.
+   *
+   * @param \Drupal\Core\Link $link
+   *   The link appended to the breadcrumb.
+   *
+   * @return $this
+   */
+  public function addLink(Link $link) {
+    $this->links[] = $link;
+
+    return $this;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function toRenderable() {
+    $build = [
+      '#cache' => [
+        'contexts' => $this->cacheContexts,
+        'tags' => $this->cacheTags,
+        'max-age' => $this->cacheMaxAge,
+      ],
+    ];
+    if (!empty($this->links)) {
+      $build += [
+        '#theme' => 'breadcrumb',
+        '#links' => $this->links,
+      ];
+    }
+    return $build;
+  }
+
+}