/** * Build the URI context classes into the given UriContextCollection. * * @param UriContextCollection $uriContextCollection */ public function buildUriContextCollection(UriContextCollection $uriContextCollection) { $this->collectionBuilder->build($uriContextCollection); foreach ($uriContextCollection->getUriContexts() as $uriContext) { $subject = $uriContextCollection->getSubjectObject(); if (null !== $uriContext->getLocale()) { $translatedSubject = $this->adapter->translateObject($subject, $uriContext->getLocale()); if (null === $translatedSubject) { @trigger_error('AdapterInterface::translateObject() has to return the subject as of version 1.1, support for by reference will be removed in 2.0.', E_USER_DEPRECATED); } else { if ($translatedSubject !== $subject) { $uriContext->setTranslatedSubjectObject($translatedSubject); } } } // generate the URI $uri = $this->uriGenerator->generateUri($uriContext); $uriContext->setUri($uri); $existingRoute = $this->adapter->findRouteForUri($uri, $uriContext); // handle existing route $autoRoute = null; if ($existingRoute) { $autoRoute = $this->handleExistingRoute($existingRoute, $uriContext); } // handle new route if (null === $autoRoute) { $autoRouteTag = $this->adapter->generateAutoRouteTag($uriContext); // TODO: The second argument below is now **pointless**, as the // UriContext contains both the original and translated subject // objects. // // See: https://github.com/symfony-cmf/RoutingAuto/issues/73 $autoRoute = $this->adapter->createAutoRoute($uriContext, $subject, $autoRouteTag); } $uriContext->setAutoRoute($autoRoute); } $this->pendingUriContextCollections[] = $uriContextCollection; }
/** * Populates an empty UriContextCollection with UriContexts. * * @param $uriContextCollection UriContextCollection */ private function getUriContextsForDocument(UriContextCollection $uriContextCollection) { $locales = $this->adapter->getLocales($uriContextCollection->getSubjectObject()) ?: array(null); foreach ($locales as $locale) { if (null !== $locale) { $subjectObject = $this->adapter->translateObject($uriContextCollection->getSubjectObject(), $locale); if (null !== $subjectObject) { $uriContextCollection->setSubjectObject($subjectObject); } else { @trigger_error('AdapterInterface::translateObject() has to return the subjectObject as of version 1.1, support for by reference will be removed in 2.0.', E_USER_DEPRECATED); } } // create and add uri context to stack $uriContext = $uriContextCollection->createUriContext($locale); $uriContextCollection->addUriContext($uriContext); // generate the URL $uri = $this->uriGenerator->generateUri($uriContext); // update the context with the URL $uriContext->setUri($uri); } }