Browse Source

Skip link headers for non-canonicalizable entities (#781)

* Update means of generating LinkHeader URL.

... allow for catching exceptions for entities without canonical
URLs.

* Coding standards...

... also, throw in the other throws declaration.

* Adjust language.

* Fix a stray capital...
pull/794/head
Adam 4 years ago committed by GitHub
parent
commit
bfa2c39f1f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 8
      src/EventSubscriber/LinkHeaderSubscriber.php
  2. 14
      src/IslandoraUtils.php

8
src/EventSubscriber/LinkHeaderSubscriber.php

@ -9,6 +9,7 @@ use Drupal\Core\Entity\EntityTypeManagerInterface;
use Drupal\Core\Routing\RouteMatchInterface;
use Drupal\Core\Session\AccountInterface;
use Drupal\islandora\IslandoraUtils;
use Drupal\Core\Entity\Exception\UndefinedLinkTemplateException;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\HttpFoundation\Response;
@ -205,7 +206,14 @@ abstract class LinkHeaderSubscriber implements EventSubscriberInterface {
// Headers are subject to an access check.
if ($referencedEntity->access('view')) {
try {
$entity_url = $this->utils->getEntityUrl($referencedEntity);
}
catch (UndefinedLinkTemplateException $e) {
// Not all referencable entities can generate canonical URLs, for
// example: block entities.
continue;
}
// Taxonomy terms are written out as
// <url>; rel="tag"; title="Tag Name"

14
src/IslandoraUtils.php

@ -563,15 +563,17 @@ class IslandoraUtils {
*
* @return string
* The entity URL.
*
* @throws \Drupal\Core\Entity\Exception\UndefinedLinkTemplateException
* Thrown if the given entity does not specify a "canonical" template.
* @throws \Drupal\Core\Entity\EntityMalformedException
*/
public function getEntityUrl(EntityInterface $entity) {
$undefined = $this->languageManager->getLanguage('und');
$entity_type = $entity->getEntityTypeId();
return Url::fromRoute(
"entity.$entity_type.canonical",
[$entity_type => $entity->id()],
['absolute' => TRUE, 'language' => $undefined]
)->toString();
return $entity->toUrl('canonical', [
'absolute' => TRUE,
'language' => $undefined,
])->toString();
}
/**

Loading…
Cancel
Save