CommentBreadcrumbBuilder.php 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. <?php
  2. namespace Drupal\comment;
  3. use Drupal\Core\Breadcrumb\BreadcrumbBuilderInterface;
  4. use Drupal\Core\Breadcrumb\Breadcrumb;
  5. use Drupal\Core\Entity\EntityManagerInterface;
  6. use Drupal\Core\Link;
  7. use Drupal\Core\Routing\RouteMatchInterface;
  8. use Drupal\Core\StringTranslation\StringTranslationTrait;
  9. /**
  10. * Class to define the comment breadcrumb builder.
  11. */
  12. class CommentBreadcrumbBuilder implements BreadcrumbBuilderInterface {
  13. use StringTranslationTrait;
  14. /**
  15. * The comment storage.
  16. *
  17. * @var \Drupal\Core\Entity\EntityStorageInterface
  18. */
  19. protected $storage;
  20. /**
  21. * Constructs the CommentBreadcrumbBuilder.
  22. *
  23. * @param \Drupal\Core\Entity\EntityManagerInterface $entity_manager
  24. * The entity manager.
  25. */
  26. public function __construct(EntityManagerInterface $entity_manager) {
  27. $this->storage = $entity_manager->getStorage('comment');
  28. }
  29. /**
  30. * {@inheritdoc}
  31. */
  32. public function applies(RouteMatchInterface $route_match) {
  33. return $route_match->getRouteName() == 'comment.reply' && $route_match->getParameter('entity');
  34. }
  35. /**
  36. * {@inheritdoc}
  37. */
  38. public function build(RouteMatchInterface $route_match) {
  39. $breadcrumb = new Breadcrumb();
  40. $breadcrumb->addCacheContexts(['route']);
  41. $breadcrumb->addLink(Link::createFromRoute($this->t('Home'), '<front>'));
  42. $entity = $route_match->getParameter('entity');
  43. $breadcrumb->addLink(new Link($entity->label(), $entity->urlInfo()));
  44. $breadcrumb->addCacheableDependency($entity);
  45. if (($pid = $route_match->getParameter('pid')) && ($comment = $this->storage->load($pid))) {
  46. /** @var \Drupal\comment\CommentInterface $comment */
  47. $breadcrumb->addCacheableDependency($comment);
  48. // Display link to parent comment.
  49. // @todo Clean-up permalink in https://www.drupal.org/node/2198041
  50. $breadcrumb->addLink(new Link($comment->getSubject(), $comment->urlInfo()));
  51. }
  52. return $breadcrumb;
  53. }
  54. }