Mercurial > hg > cmmr2012-drupal-site
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 } |