/** * @param array $data * @return ISummit */ public function createSummit(array $data) { $this_var = $this; $repository = $this->summit_repository; $factory = $this->summit_factory; return $this->tx_manager->transaction(function () use($this_var, $factory, $data, $repository) { $summit = new Summit(); $summit->registerMainInfo($factory->buildMainInfo($data)); if ($repository->isDuplicated($summit)) { throw new EntityAlreadyExistsException('Summit', sprintf('Name %s', $summit->getName())); } $repository->add($summit); return $summit; }); }