* * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Bridge\Doctrine\Messenger; use Doctrine\Persistence\ManagerRegistry; use Symfony\Component\EventDispatcher\EventSubscriberInterface; use Symfony\Component\Messenger\Event\WorkerMessageFailedEvent; use Symfony\Component\Messenger\Event\WorkerMessageHandledEvent; /** * Clears entity managers between messages being handled to avoid outdated data. * * @author Ryan Weaver */ class DoctrineClearEntityManagerWorkerSubscriber implements EventSubscriberInterface { private $managerRegistry; public function __construct(ManagerRegistry $managerRegistry) { $this->managerRegistry = $managerRegistry; } public function onWorkerMessageHandled() { $this->clearEntityManagers(); } public function onWorkerMessageFailed() { $this->clearEntityManagers(); } public static function getSubscribedEvents() { yield WorkerMessageHandledEvent::class => 'onWorkerMessageHandled'; yield WorkerMessageFailedEvent::class => 'onWorkerMessageFailed'; } private function clearEntityManagers() { foreach ($this->managerRegistry->getManagers() as $manager) { $manager->clear(); } } }