コード例 #1
0
 /**
  * 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;
 }
コード例 #2
0
 /**
  * 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();
     }
 }