/** * Returns route collection for current request * * @param Request $request * * @return RouteCollection */ public function getRouteCollectionForRequest(Request $request) { $collection = new RouteCollection(); $path = $this->getNormalizedPath($request); $resource = $this->repository->findOneBy(['path' => $path]); if ($resource) { $route = $this->createRoute($resource); $collection->add(self::DYNAMIC_PREFIX . $resource->getId(), $route); } return $collection; }
/** * Validate the route entity * * @param mixed $entity * @param Constraint $constraint */ public function validate($entity, Constraint $constraint) { if (!$entity instanceof RoutableSubjectInterface) { throw new \InvalidArgumentException(sprintf('Expected instance of %s', RoutableSubjectInterface::class)); } $route = $entity->getRoute(); $slug = $entity->getSlug(); $locale = $entity->getLocale(); $result = $this->routeRepository->findOneBy(['path' => $slug, 'locale' => $locale]); // route is unique always if no result was found if (null === $result) { return; } // skip validation if there is exact match if ($route instanceof RouteInterface && $result->getIdentifier()->getId() === $route->getIdentifier()->getId()) { return; } if ($this->context instanceof ExecutionContextInterface) { $this->context->buildViolation($constraint->message)->setParameter('{{ type }}', $this->formatValue($result->getType()))->setParameter('{{ url }}', $this->generatePath($result))->atPath('slug')->setInvalidValue($slug)->addViolation(); } }