comparison core/modules/media/src/EventSubscriber/MediaConfigSubscriber.php @ 5:12f9dff5fda9 tip

Update to Drupal core 8.7.1
author Chris Cannam
date Thu, 09 May 2019 15:34:47 +0100
parents
children
comparison
equal deleted inserted replaced
4:a9cd425dd02b 5:12f9dff5fda9
1 <?php
2
3 namespace Drupal\media\EventSubscriber;
4
5 use Drupal\Core\Cache\CacheTagsInvalidatorInterface;
6 use Drupal\Core\Config\ConfigCrudEvent;
7 use Drupal\Core\Config\ConfigEvents;
8 use Drupal\Core\Entity\EntityTypeManagerInterface;
9 use Drupal\Core\Routing\RouteBuilderInterface;
10 use Symfony\Component\EventDispatcher\EventSubscriberInterface;
11
12 /**
13 * Listens to the config save event for media.settings.
14 */
15 class MediaConfigSubscriber implements EventSubscriberInterface {
16
17 /**
18 * The route builder.
19 *
20 * @var \Drupal\Core\Routing\RouteBuilderInterface
21 */
22 protected $routeBuilder;
23
24 /**
25 * The cache tags invalidator.
26 *
27 * @var \Drupal\Core\Cache\CacheTagsInvalidatorInterface
28 */
29 protected $cacheTagsInvalidator;
30
31 /**
32 * The entity type manager.
33 *
34 * @var \Drupal\Core\Entity\EntityTypeManagerInterface
35 */
36 protected $entityTypeManager;
37
38 /**
39 * Constructs the MediaConfigSubscriber.
40 *
41 * @param \Drupal\Core\Routing\RouteBuilderInterface $router_builder
42 * The route builder.
43 * @param \Drupal\Core\Cache\CacheTagsInvalidatorInterface $cache_tags_invalidator
44 * The cache tags invalidator.
45 * @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager
46 * The entity type manager.
47 */
48 public function __construct(RouteBuilderInterface $router_builder, CacheTagsInvalidatorInterface $cache_tags_invalidator, EntityTypeManagerInterface $entity_type_manager) {
49 $this->routeBuilder = $router_builder;
50 $this->cacheTagsInvalidator = $cache_tags_invalidator;
51 $this->entityTypeManager = $entity_type_manager;
52 }
53
54 /**
55 * Updates entity type definitions and ensures routes are rebuilt when needed.
56 *
57 * @param \Drupal\Core\Config\ConfigCrudEvent $event
58 * The ConfigCrudEvent to process.
59 */
60 public function onSave(ConfigCrudEvent $event) {
61 $saved_config = $event->getConfig();
62 if ($saved_config->getName() === 'media.settings' && $event->isChanged('standalone_url')) {
63 $this->cacheTagsInvalidator->invalidateTags([
64 // The configuration change triggers entity type definition changes,
65 // which in turn triggers routes to appear or disappear.
66 // @see media_entity_type_alter()
67 'entity_types',
68 // The 'rendered' cache tag needs to be explicitly invalidated to ensure
69 // that all links to Media entities are re-rendered. Ideally, this would
70 // not be necessary; invalidating the 'entity_types' cache tag should be
71 // sufficient. But that cache tag would then need to be on nearly
72 // everything, resulting in excessive complexity. We prefer pragmatism.
73 'rendered',
74 ]);
75 // @todo Remove this when invalidating the 'entity_types' cache tag is
76 // respected by the entity type plugin manager. See
77 // https://www.drupal.org/project/drupal/issues/3001284 and
78 // https://www.drupal.org/project/drupal/issues/3013659.
79 $this->entityTypeManager->clearCachedDefinitions();
80 $this->routeBuilder->setRebuildNeeded();
81 }
82 }
83
84 /**
85 * {@inheritdoc}
86 */
87 public static function getSubscribedEvents() {
88 $events[ConfigEvents::SAVE][] = ['onSave'];
89 return $events;
90 }
91
92 }