classFinder = $classFinder; } protected function getClassName(string $name) : ?string { return $this->classFinder->find('Entities', $name); } public function setEntityManager(EntityManager $entityManager) { if ($this->entityManager) { throw new Error("EntityManager can be set only once."); } $this->entityManager = $entityManager; } public function create(string $name) : IEntity { $className = $this->getClassName($name); if (!class_exists($className)) { $className = Entity::class; } $defs = $this->entityManager->getMetadata()->get($name); if (is_null($defs)) { throw new Error("Entity '{$name}' is not defined in metadata."); } return new $className($defs, $this->entityManager); } }