vendor/pimcore/pimcore/lib/Event/Traits/RecursionBlockingEventDispatchHelperTrait.php line 41

Open in your IDE?
  1. <?php
  2. /**
  3.  * Pimcore
  4.  *
  5.  * This source file is available under two different licenses:
  6.  * - GNU General Public License version 3 (GPLv3)
  7.  * - Pimcore Commercial License (PCL)
  8.  * Full copyright and license information is available in
  9.  * LICENSE.md which is distributed with this source code.
  10.  *
  11.  *  @copyright  Copyright (c) Pimcore GmbH (http://www.pimcore.org)
  12.  *  @license    http://www.pimcore.org/license     GPLv3 and PCL
  13.  */
  14. namespace Pimcore\Event\Traits;
  15. /**
  16.  * @internal
  17.  */
  18. trait RecursionBlockingEventDispatchHelperTrait
  19. {
  20.     /**
  21.      * @var array
  22.      */
  23.     private array $activeDispatchingEvents = [];
  24.     /**
  25.      * Dispatches an event, avoids recursion by checking if the active dispatch event is the same
  26.      *
  27.      * @param object $event
  28.      * @param string|null $eventName
  29.      *
  30.      * @return void
  31.      */
  32.     protected function dispatchEvent(object $eventstring $eventName null): void
  33.     {
  34.         $eventName ??= \get_class($event);
  35.         if (!isset($this->activeDispatchingEvents[$eventName])) {
  36.             $this->activeDispatchingEvents[$eventName] = true;
  37.             \Pimcore::getEventDispatcher()->dispatch($event$eventName);
  38.             unset($this->activeDispatchingEvents[$eventName]);
  39.         }
  40.     }
  41. }