/** * @param AbstractRoute $route */ private function addToRouteResultMapping(AbstractRoute $route) { if ($route instanceof FinalRoute) { $this->resultToRouteMapping[$route->getResult()] = $route; return; } if ($route instanceof RouteGroup) { foreach ($route->getRoutes() as $childRoute) { $this->addToRouteResultMapping($childRoute); } return; } throw new \InvalidArgumentException('Route type should be "' . FinalRoute::class . '" or "' . RouteGroup::class . '"'); }
/** * @inheritdoc */ public function build(Url $url, UrlBuilder $urlBuilder) { if (!empty($this->parentRoute)) { $this->parentRoute->build($url, $urlBuilder); } if (!empty($this->urlTemplate)) { $this->urlTemplate->build($url, $urlBuilder); } }
/** * @param AbstractRoute $route */ protected function storeRouteParameters(AbstractRoute $route) { foreach ($route->getDefaultParameters() as $key => $value) { $this->setParameter($key, $value); } foreach ($route->getModifiers() as $modifier) { foreach ($modifier->getDefaultParameters() as $key => $value) { $this->setParameter($key, $value); } } if ($urlTemplate = $route->getUrlTemplate()) { foreach ($urlTemplate->getDefaultParameters() as $key => $value) { $this->setParameter($key, $value); } } if ($parentRoute = $route->getParentRoute()) { $this->storeRouteParameters($parentRoute); } }
/** * @param AbstractRoute $route * @return $this */ public function addRoute(AbstractRoute $route) { $this->routes[] = $route; $route->setParentRoute($this); return $this; }
/** * @inheritdoc */ public function build(Url $url, UrlBuilder $urlBuilder) { parent::build($url, $urlBuilder); $this->buildModifiers($url, $urlBuilder); }