diff -u b/core/lib/Drupal/Core/Breadcrumb/BreadcrumbBuilderInterface.php b/core/lib/Drupal/Core/Breadcrumb/BreadcrumbBuilderInterface.php
--- b/core/lib/Drupal/Core/Breadcrumb/BreadcrumbBuilderInterface.php
+++ b/core/lib/Drupal/Core/Breadcrumb/BreadcrumbBuilderInterface.php
@@ -32,7 +32,7 @@
* @param \Drupal\Core\Routing\RouteMatchInterface $route_match
* The current route match.
*
- * @return \Drupal\Core\Breadcrumb\Breadcrumb
+ * @return mixed[]
* A breadcrumb.
*/
public function build(RouteMatchInterface $route_match);
diff -u b/core/lib/Drupal/Core/Breadcrumb/BreadcrumbManager.php b/core/lib/Drupal/Core/Breadcrumb/BreadcrumbManager.php
--- b/core/lib/Drupal/Core/Breadcrumb/BreadcrumbManager.php
+++ b/core/lib/Drupal/Core/Breadcrumb/BreadcrumbManager.php
@@ -7,7 +7,6 @@
namespace Drupal\Core\Breadcrumb;
-use \Drupal\Core\Breadcrumb\Breadcrumb;
use Drupal\Component\Utility\SafeMarkup;
use Drupal\Core\Extension\ModuleHandlerInterface;
use Drupal\Core\Routing\RouteMatchInterface;
@@ -77,7 +76,9 @@
* {@inheritdoc}
*/
public function build(RouteMatchInterface $route_match) {
- $breadcrumb = array();
+ $build = [
+ 'links' => [],
+ ];
$context = array('builder' => NULL);
// Call the build method of registered breadcrumb builders,
// until one of them returns an array.
@@ -87,12 +88,12 @@
continue;
}
- $build = $builder->build($route_match);
+ $breadcrumb = $builder->build($route_match);
- if ($build instanceof Breadcrumb) {
+ if ($breadcrumb instanceof Breadcrumb) {
// The builder returned an array of breadcrumb links.
- $breadcrumb['contexts'] = $build->getCacheContexts();
- $breadcrumb['links'] = $build->getLinks();
+ $build['contexts'] = $breadcrumb->getCacheContexts();
+ $build['links'] = $breadcrumb->getLinks();
$context['builder'] = $builder;
break;
}
@@ -101,9 +102,9 @@
}
}
// Allow modules to alter the breadcrumb.
- $this->moduleHandler->alter('system_breadcrumb', $breadcrumb['links'], $route_match, $context);
+ $this->moduleHandler->alter('system_breadcrumb', $build['links'], $route_match, $context);
// Fall back to an empty breadcrumb.
- return $breadcrumb;
+ return $build;
}
/**
only in patch2:
unchanged:
--- a/core/modules/forum/tests/src/Unit/Breadcrumb/ForumBreadcrumbBuilderBaseTest.php
+++ b/core/modules/forum/tests/src/Unit/Breadcrumb/ForumBreadcrumbBuilderBaseTest.php
@@ -128,7 +128,7 @@ public function testBuild() {
);
// And finally, the test.
- $this->assertEquals($expected, $breadcrumb_builder->build($route_match));
+ $this->assertEquals($expected, $breadcrumb_builder->build($route_match)->getLinks());
}
}
only in patch2:
unchanged:
--- a/core/tests/Drupal/Tests/Core/Breadcrumb/BreadcrumbManagerTest.php
+++ b/core/tests/Drupal/Tests/Core/Breadcrumb/BreadcrumbManagerTest.php
@@ -7,6 +7,7 @@
namespace Drupal\Tests\Core\Breadcrumb;
+use Drupal\Core\Breadcrumb\Breadcrumb;
use Drupal\Core\Breadcrumb\BreadcrumbManager;
use Drupal\Tests\UnitTestCase;
@@ -17,6 +18,13 @@
class BreadcrumbManagerTest extends UnitTestCase {
/**
+ * The breadcrumb object.
+ *
+ * @var \Drupal\Core\Breadcrumb\Breadcrumb
+ */
+ protected $breadcrumb;
+
+ /**
* The tested breadcrumb manager.
*
* @var \Drupal\Core\Breadcrumb\BreadcrumbManager
@@ -36,6 +44,7 @@ class BreadcrumbManagerTest extends UnitTestCase {
protected function setUp() {
$this->moduleHandler = $this->getMock('Drupal\Core\Extension\ModuleHandlerInterface');
$this->breadcrumbManager = new BreadcrumbManager($this->moduleHandler);
+ $this->breadcrumb = new Breadcrumb();
}
/**
@@ -43,7 +52,7 @@ protected function setUp() {
*/
public function testBuildWithoutBuilder() {
$result = $this->breadcrumbManager->build($this->getMock('Drupal\Core\Routing\RouteMatchInterface'));
- $this->assertEquals(array(), $result);
+ $this->assertEquals(array(), $result['links']);
}
/**
@@ -51,7 +60,8 @@ public function testBuildWithoutBuilder() {
*/
public function testBuildWithSingleBuilder() {
$builder = $this->getMock('Drupal\Core\Breadcrumb\BreadcrumbBuilderInterface');
- $breadcrumb = array('Test');
+ $links = array('Test');
+ $this->breadcrumb->setLinks($links);
$builder->expects($this->once())
->method('applies')
@@ -59,17 +69,17 @@ public function testBuildWithSingleBuilder() {
$builder->expects($this->once())
->method('build')
- ->will($this->returnValue($breadcrumb));
+ ->willReturn($this->breadcrumb);
$route_match = $this->getMock('Drupal\Core\Routing\RouteMatchInterface');
$this->moduleHandler->expects($this->once())
->method('alter')
- ->with('system_breadcrumb', $breadcrumb, $route_match, array('builder' => $builder));
+ ->with('system_breadcrumb', $links, $route_match, array('builder' => $builder));
$this->breadcrumbManager->addBuilder($builder, 0);
$result = $this->breadcrumbManager->build($route_match);
- $this->assertEquals($breadcrumb, $result);
+ $this->assertEquals($links, $result['links']);
}
/**
@@ -83,25 +93,26 @@ public function testBuildWithMultipleApplyingBuilders() {
->method('build');
$builder2 = $this->getMock('Drupal\Core\Breadcrumb\BreadcrumbBuilderInterface');
- $breadcrumb2 = array('Test2');
+ $links2 = array('Test2');
+ $this->breadcrumb->setLinks($links2);
$builder2->expects($this->once())
->method('applies')
->will($this->returnValue(TRUE));
$builder2->expects($this->once())
->method('build')
- ->will($this->returnValue($breadcrumb2));
+ ->willReturn($this->breadcrumb);
$route_match = $this->getMock('Drupal\Core\Routing\RouteMatchInterface');
$this->moduleHandler->expects($this->once())
->method('alter')
- ->with('system_breadcrumb', $breadcrumb2, $route_match, array('builder' => $builder2));
+ ->with('system_breadcrumb', $links2, $route_match, array('builder' => $builder2));
$this->breadcrumbManager->addBuilder($builder1, 0);
$this->breadcrumbManager->addBuilder($builder2, 10);
$result = $this->breadcrumbManager->build($route_match);
- $this->assertEquals($breadcrumb2, $result);
+ $this->assertEquals($links2, $result['links']);
}
/**
@@ -116,25 +127,26 @@ public function testBuildWithOneNotApplyingBuilders() {
->method('build');
$builder2 = $this->getMock('Drupal\Core\Breadcrumb\BreadcrumbBuilderInterface');
- $breadcrumb2 = array('Test2');
+ $links2 = array('Test2');
+ $this->breadcrumb->setLinks($links2);
$builder2->expects($this->once())
->method('applies')
->will($this->returnValue(TRUE));
$builder2->expects($this->once())
->method('build')
- ->will($this->returnValue($breadcrumb2));
+ ->willReturn($this->breadcrumb);
$route_match = $this->getMock('Drupal\Core\Routing\RouteMatchInterface');
$this->moduleHandler->expects($this->once())
->method('alter')
- ->with('system_breadcrumb', $breadcrumb2, $route_match, array('builder' => $builder2));
+ ->with('system_breadcrumb', $links2, $route_match, array('builder' => $builder2));
$this->breadcrumbManager->addBuilder($builder1, 10);
$this->breadcrumbManager->addBuilder($builder2, 0);
$result = $this->breadcrumbManager->build($route_match);
- $this->assertEquals($breadcrumb2, $result);
+ $this->assertEquals($links2, $result['links']);
}
/**