public function store($hash, $data) { $classMetadata = $this->metadataManager->loadByClassname($data['class']); $this->storageAdapter->store($hash, $data, $classMetadata->getContext()); $this->searchAdapter->indexObject($hash, $data['data'], $classMetadata); return $data; }
public function store(ModelInterface $model, array $options = array()) { // determine metadata and data from model $metadata = $this->metadataManager->loadByModel($model); $data = $this->serializer->serialize($model, array_merge($metadata->getDataFields(), $metadata->getMetadataFields())); // generate hash if necessary if ($metadata->isHashGenerated()) { $hash = $this->factory->createHash(json_encode($data)); } elseif (!($hash = $model->getHash())) { throw new \Exception('Hash not specified'); } $this->accessor->setValue($model, 'hash', $hash); $isNew = !$this->contains($hash, $model->getClass()); // dispatch event $event = new DatabaseStoreEvent($model, $data, $isNew, $metadata, $options); $this->eventDispatcher->dispatch(DatabaseEvent::STORE_EVENT, $event); // possibility to cancel store in a event-handler if ($event->isCanceled()) { return; } // possibility to change model in the event-handler to a stub $model = $event->getModel(); $data = $event->getData(); // prepare object $object = array('data' => $data, 'class' => $model->getClass()); // append existing policies if ($model instanceof DistributedModelInterface) { $object['policies'] = serialize($model->getPolicyCollection()); } // store it $this->storageAdapter->store($hash, $object, $metadata->getContext()); $this->searchAdapter->index($hash, $model, $metadata); return $model; }
/** * @dataProvider adapterProvider * * @param StorageAdapterInterface $storageAdapter * @param string $hash * @param array $data * @param string $context */ public function testDeleteAllWithoutContext(StorageAdapterInterface $storageAdapter, $hash, $data, $context) { $hash2 = 'hash2'; $data2 = 'data2'; $context2 = 'context2'; $this->assertTrue($storageAdapter->store($hash, $data, $context)); $this->assertTrue($storageAdapter->store($hash2, $data2, $context2)); $this->assertTrue($storageAdapter->deleteAll()); $this->assertFalse($storageAdapter->contains($hash, $context)); $this->assertFalse($storageAdapter->contains($hash2, $context2)); }