protected function blockCipherFields(AbstractChangeEventArgs $eventArgs) { $metadata = $eventArgs->getMetadata(); $cryptMetadata = $metadata->getCrypt(); if (!isset($cryptMetadata) || !isset($cryptMetadata['blockCipher'])) { return; } $document = $eventArgs->getDocument(); $changeSet = $eventArgs->getChangeSet(); foreach ($cryptMetadata['blockCipher'] as $field => $setting) { if ($this->hasChanged($field, $changeSet)) { $service = $this->serviceLocator->get($setting['service']); if (!$service instanceof BlockCipherServiceInterface) { throw new \Zoop\Shard\Exception\InvalidArgumentException(); } $service->encryptField($field, $document, $metadata); $eventArgs->addRecompute($field); } } }