/** * {@inheritdoc} */ public function update(RoutableInterface $entity, $path = null) { if (null === $entity->getRoute()) { throw new RouteNotCreatedException($entity); } $config = $this->getClassMappingConfiguration(get_class($entity)); if (null === $path) { $path = $this->routeGenerators[$config['generator']]->generate($entity, $config['options']); } if ($path === $entity->getRoute()->getPath()) { return $entity->getRoute(); } $route = $this->routeRepository->createNew()->setPath($path)->setEntityClass(get_class($entity))->setEntityId($entity->getId())->setLocale($entity->getLocale()); $route = $this->conflictResolver->resolve($route); // path haven't changed after conflict resolving if ($route->getPath() === $entity->getRoute()->getPath()) { return $entity->getRoute(); } $historyRoute = $entity->getRoute()->setHistory(true)->setTarget($route); $route->addHistory($historyRoute); foreach ($historyRoute->getHistories() as $historyRoute) { if ($historyRoute->getPath() === $route->getPath()) { // the history route will be restored $historyRoute->removeTarget()->setHistory(false); continue; } $route->addHistory($historyRoute); $historyRoute->setTarget($route); } $entity->setRoute($route); return $route; }
/** * @param RoutableInterface $entity */ public function __construct(RoutableInterface $entity) { parent::__construct(sprintf('Route "%s" for entity of type "%s" and identifier "%s" has already been created.', $entity->getRoute()->getPath(), get_class($entity), $entity->getId())); $this->entity = $entity; }