12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- <?php
- namespace Drupal\Core\EventSubscriber;
- use Symfony\Component\DependencyInjection\ContainerAwareInterface;
- use Symfony\Component\DependencyInjection\ContainerAwareTrait;
- use Symfony\Component\EventDispatcher\EventSubscriberInterface;
- use Symfony\Component\HttpKernel\Event\PostResponseEvent;
- use Symfony\Component\HttpKernel\KernelEvents;
- /**
- * Destructs services that are initiated and tagged with "needs_destruction".
- *
- * @see \Drupal\Core\DestructableInterface
- */
- class KernelDestructionSubscriber implements EventSubscriberInterface, ContainerAwareInterface {
- use ContainerAwareTrait;
- /**
- * Holds an array of service ID's that will require destruction.
- *
- * @var array
- */
- protected $services = [];
- /**
- * Registers a service for destruction.
- *
- * Calls to this method are set up in
- * RegisterServicesForDestructionPass::process().
- *
- * @param string $id
- * Name of the service.
- */
- public function registerService($id) {
- $this->services[] = $id;
- }
- /**
- * Invoked by the terminate kernel event.
- *
- * @param \Symfony\Component\HttpKernel\Event\PostResponseEvent $event
- * The event object.
- */
- public function onKernelTerminate(PostResponseEvent $event) {
- foreach ($this->services as $id) {
- // Check if the service was initialized during this request, destruction
- // is not necessary if the service was not used.
- if ($this->container->initialized($id)) {
- $service = $this->container->get($id);
- $service->destruct();
- }
- }
- }
- /**
- * Registers the methods in this class that should be listeners.
- *
- * @return array
- * An array of event listener definitions.
- */
- public static function getSubscribedEvents() {
- // Run this subscriber after others as those might use services that need
- // to be terminated as well or run code that needs to run before
- // termination.
- $events[KernelEvents::TERMINATE][] = ['onKernelTerminate', -100];
- return $events;
- }
- }
|