/**
  * {@inheritdoc}
  */
 public function resolve(Route $route, RouteCollectionAccessor $routes)
 {
     if (!in_array('OPTIONS', $route->getMethods(), true)) {
         return;
     }
     $entryPath = $this->getEntryPath($route);
     if (!$entryPath) {
         return;
     }
     $nameFromController = $this->getNameFromController($route);
     if (!$nameFromController) {
         return;
     }
     $nameFromPath = str_replace('/', '', $entryPath);
     if ($nameFromPath === $nameFromController) {
         return;
     }
     if (false !== ($pos = strrpos($entryPath, '/'))) {
         $pluralName = substr($entryPath, $pos + 1);
         $singleName = substr($nameFromController, $pos - substr_count($entryPath, '/') + 1);
     } else {
         $pluralName = $entryPath;
         $singleName = $nameFromController;
     }
     if ($pluralName === $singleName || $pluralName !== Inflector::pluralize($singleName)) {
         return;
     }
     $singlePath = str_replace('/' . $pluralName, '/' . $singleName, $route->getPath());
     $singleRoute = $routes->cloneRoute($route);
     $singleRoute->setPath($singlePath);
     $singleRoute->setOption('old_options', true);
     $pluralRouteName = $routes->getName($route);
     $routes->insert($routes->generateRouteName($pluralRouteName), $singleRoute, $pluralRouteName);
 }
 /**
  * @param Route                   $route
  * @param RouteCollectionAccessor $routes
  * @param array                   $entities [[entity plural alias, url safe class name], ...]
  */
 protected function adjustRoutes(Route $route, RouteCollectionAccessor $routes, $entities)
 {
     $routeName = $routes->getName($route);
     foreach ($entities as $entity) {
         list($pluralAlias, $urlSafeClassName) = $entity;
         $existingRoute = $routes->getByPath(str_replace(self::ENTITY_PLACEHOLDER, $pluralAlias, $route->getPath()), $route->getMethods());
         if ($existingRoute) {
             // move existing route before the current route
             $existingRouteName = $routes->getName($existingRoute);
             $routes->remove($existingRouteName);
             $routes->insert($existingRouteName, $existingRoute, $routeName, true);
             // additional route for entities which has api, but it not recognize urls like
             // /api/rest/latest/Oro_Bundle_AddressBundle_Entity_Country
             // TODO: This should be removed in scope of https://magecore.atlassian.net/browse/BAP-8650
             $dictionaryRoute = $routes->cloneRoute($existingRoute);
             $dictionaryRoute->setPath(str_replace(self::ENTITY_PLACEHOLDER, $urlSafeClassName, $route->getPath()));
             $routes->insert($routes->generateRouteName($existingRouteName), $dictionaryRoute, $existingRouteName, true);
         } else {
             // add an additional strict route based on the base route and current entity
             $strictRoute = $routes->cloneRoute($route);
             $strictRoute->setPath(str_replace(self::ENTITY_PLACEHOLDER, $pluralAlias, $strictRoute->getPath()));
             $strictRoute->setDefault(self::ENTITY_ATTRIBUTE, $pluralAlias);
             $routes->insert($routes->generateRouteName($routeName), $strictRoute, $routeName, true);
         }
     }
 }
 /**
  * @param Route                   $route
  * @param RouteCollectionAccessor $routes
  * @param string[]                $activities
  */
 protected function adjustRoutes(Route $route, RouteCollectionAccessor $routes, $activities)
 {
     $routeName = $routes->getName($route);
     foreach ($activities as $activity) {
         $existingRoute = $routes->getByPath(str_replace(self::ACTIVITY_PLACEHOLDER, $activity, $route->getPath()), $route->getMethods());
         if ($existingRoute) {
             // move existing route before the current route
             $existingRouteName = $routes->getName($existingRoute);
             $routes->remove($existingRouteName);
             $routes->insert($existingRouteName, $existingRoute, $routeName, true);
         } else {
             // add an additional strict route based on the base route and current activity
             $strictRoute = $routes->cloneRoute($route);
             $strictRoute->setPath(str_replace(self::ACTIVITY_PLACEHOLDER, $activity, $strictRoute->getPath()));
             $strictRoute->setDefault(self::ACTIVITY_ATTRIBUTE, $activity);
             $this->completeRouteRequirements($strictRoute);
             $routes->insert($routes->generateRouteName($routeName), $strictRoute, $routeName, true);
         }
     }
 }
 public function testRemoveWithAlreadyBuilderRouteMap()
 {
     $route1 = new Route('/route1');
     $route2 = new Route('/route2');
     $this->collection->add('route1', $route1);
     $this->collection->add('route2', $route2);
     // force the route map building
     $this->assertSame($route1, $this->accessor->getByPath('/route1', []));
     $this->accessor->remove('route1');
     $this->assertEquals(['route2'], array_keys($this->collection->all()));
     $this->assertNull($this->accessor->getByPath('/route1', []));
 }
 /**
  * @param Route                   $route
  * @param RouteCollectionAccessor $routes
  * @param string[]                $entities
  *
  * @return string[] The list of entities handled by the default controller
  */
 protected function adjustRoutes(Route $route, RouteCollectionAccessor $routes, $entities)
 {
     $result = [];
     $routeName = $routes->getName($route);
     foreach ($entities as $className) {
         $entity = $this->entityAliasResolver->getPluralAlias($className);
         $existingRoute = $routes->getByPath(str_replace(self::ENTITY_PLACEHOLDER, $entity, $route->getPath()), $route->getMethods());
         if ($existingRoute) {
             // move existing route before the current route
             $existingRouteName = $routes->getName($existingRoute);
             $routes->remove($existingRouteName);
             $routes->insert($existingRouteName, $existingRoute, $routeName, true);
         } else {
             // add an additional strict route based on the base route and current entity
             $strictRoute = $routes->cloneRoute($route);
             $strictRoute->setPath(str_replace(self::ENTITY_PLACEHOLDER, $entity, $strictRoute->getPath()));
             $strictRoute->setDefault(self::ENTITY_ATTRIBUTE, $entity);
             $routes->insert($routes->generateRouteName($routeName), $strictRoute, $routeName, true);
             $result[] = $entity;
             $result[] = $this->entityClassNameHelper->getUrlSafeClassName($className);
         }
     }
     return $result;
 }
Exemplo n.º 6
0
 /**
  * @param Route                   $route
  * @param RouteCollectionAccessor $routes
  * @param string[]                $entities
  */
 protected function adjustRoutes(Route $route, RouteCollectionAccessor $routes, $entities)
 {
     $routeName = $routes->getName($route);
     foreach ($entities as $className) {
         $entity = $this->entityAliasResolver->getPluralAlias($className);
         if (empty($entity)) {
             continue;
         }
         $existingRoute = $routes->getByPath(str_replace(self::ENTITY_PLACEHOLDER, $entity, $route->getPath()), $route->getMethods());
         if ($existingRoute) {
             // move existing route before the current route
             $existingRouteName = $routes->getName($existingRoute);
             $routes->remove($existingRouteName);
             $routes->insert($existingRouteName, $existingRoute, $routeName, true);
         } else {
             // add an additional strict route based on the base route and current entity
             $strictRoute = $routes->cloneRoute($route);
             $strictRoute->setPath(str_replace(self::ENTITY_PLACEHOLDER, $entity, $strictRoute->getPath()));
             $strictRoute->setDefault(self::ENTITY_ATTRIBUTE, $entity);
             $requirements = $strictRoute->getRequirements();
             unset($requirements[self::ENTITY_ATTRIBUTE]);
             $strictRoute->setRequirements($requirements);
             if ($this->hasAttribute($route, self::ID_PLACEHOLDER)) {
                 $this->setIdRequirement($strictRoute, $className);
             }
             $routes->insert($routes->generateRouteName($routeName), $strictRoute, $routeName, true);
         }
     }
 }