BreadcrumbBuilder.php in Current Page Crumb 8
File
src/BreadcrumbBuilder.php
View source
<?php
namespace Drupal\current_page_crumb;
use Drupal\Component\Utility\Unicode;
use Drupal\Core\Cache\CacheableDependencyInterface;
use Drupal\Core\Link;
use Drupal\Core\Routing\RouteMatchInterface;
use Drupal\system\PathBasedBreadcrumbBuilder;
use Symfony\Cmf\Component\Routing\RouteObjectInterface;
class BreadcrumbBuilder extends PathBasedBreadcrumbBuilder {
public function build(RouteMatchInterface $route_match) {
$breadcrumbs = parent::build($route_match);
$request = \Drupal::request();
$path = trim($this->context
->getPathInfo(), '/');
$path_elements = explode('/', $path);
$route = $request->attributes
->get(RouteObjectInterface::ROUTE_OBJECT);
if ($route && !$route
->getOption('_admin_route') && !$this->pathMatcher
->isFrontPage()) {
$title = $this->titleResolver
->getTitle($request, $route);
if (!isset($title)) {
$title = str_replace([
'-',
'_',
], ' ', Unicode::ucfirst(end($path_elements)));
}
$breadcrumbs
->addLink(Link::createFromRoute($title, '<none>'));
}
$parameters = $route_match
->getParameters();
foreach ($parameters as $key => $parameter) {
if ($key === 'view_id') {
$breadcrumbs
->addCacheTags([
'config:views.view.' . $parameter,
]);
}
if ($parameter instanceof CacheableDependencyInterface) {
$breadcrumbs
->addCacheableDependency($parameter);
}
}
$breadcrumbs
->addCacheContexts([
'route',
'url.path',
'languages',
]);
return $breadcrumbs;
}
}