/** * {@inheritDoc} */ public function supportsObject($object, $onEvent = null) { if (!is_object($object)) { throw UnexpectedTypeException::create($object, 'object'); } $class = get_class($object); if (!$this->metadataFactory->supportsClass($class)) { return false; } if (!$onEvent) { return true; } $metadata = $this->metadataFactory->loadMetadata($class); if (count($metadata->getNotifications()) == 1) { return true; } $notificationMetadata = $metadata->getNotificationForEvent($onEvent); return (bool) $notificationMetadata; }
/** * Add class listens * * @param string|array $classes * @param string $onEvent * * @return Builder * * @throws ClassNotSupportedException */ public function listen($classes, $onEvent = null) { if (!is_array($classes)) { $classes = [$classes]; } foreach ($classes as $class) { if (!$this->metadataFactory->supportsClass($class)) { throw new ClassNotSupportedException(sprintf('The class "%s" not supports for notification system.', $class)); } $metadata = $this->metadataFactory->loadMetadata($class); if ($onEvent) { $notifications = [$metadata->getNotificationForEvent($onEvent)]; } else { $notifications = $metadata->getNotifications(); } foreach ($notifications as $notification) { $this->listens[$notification->getName()] = $class; } } return $this; }
/** * {@inheritDoc} */ public function supportsClass($class) { if (is_object($class)) { $class = get_class($class); } $key = 'notifier.classes'; $classes = $this->cache->get($key); if (null === $classes) { $classes = []; } $mustUpdateCache = false; if (!isset($classes[$class])) { $supports = $this->delegate->supportsClass($class); $classes[$class] = $supports; $mustUpdateCache = true; } else { $supports = $classes[$class]; } if ($mustUpdateCache) { $this->cache->set($key, $classes); } return $supports; }