/** * Diese Methode wird für jedes geänderte Entity aufgerufen und führt die jewelige * Operation auf der Datenbank aus. * * Der Entity-Typ um den es geht steht in der Struktur entityAspect im Feld entityTypeName. * Dieses Feld enthält einen String, der aus Entity-Name und Namespace besteht. Der * Entity-Name steht vor dem : * * @param $changedEntity * @return BaseEntity|null * @throws \InvalidArgumentException */ protected function saveEntity($changedEntity) { $aspect = $changedEntity->entityAspect; $parts = explode(':', $aspect->entityTypeName); $resourceName = $parts[0]; if (!$this->endpoint->hasResource($resourceName)) { throw new \InvalidArgumentException('Resource ' . $resourceName . ' is not available in this endpoint.'); } $repository = $this->endpoint->getResource($resourceName)->getRepository(); $response = null; if ($aspect->entityState === 'Added') { $changedEntity->id = -1; $response = $repository->createOrUpdate($changedEntity); } elseif ($aspect->entityState === 'Modified') { $response = $repository->createOrUpdate($changedEntity); } elseif ($aspect->entityState === 'Deleted') { $repository->delete($changedEntity->id); } // Als Rückgabe wird die geänderte Entität erwartet. Da sich in den preSave Handlern, // was geändert haben könnte an dieser Stelle nochmal neu generieren. if ($response instanceof BaseEntity) { return $repository->getResourceFromEntity($response); } else { return $response; } }