protected static function getClassRoutes($className, $directoryPrefix, $urlPrefix, $parseActions = TRUE) { $regex = sprintf('@^Controller_%s_V(\\d+)_(.+)$@', str_replace(DIRECTORY_SEPARATOR, '_', rtrim($directoryPrefix, DIRECTORY_SEPARATOR))); if (preg_match($regex, $className, $matches)) { $version = $matches[1]; $urlPrefix = str_replace('{version}', $version, $urlPrefix) . '/'; $controllerName = $matches[2]; /** @var RestfulAPI\Route $route */ $route = Annotations::getClassAnnotation($className, self::annotationRoute); if (NULL === $route) { $route = Annotations::annotationClass(self::annotationRoute); } $route->name = $className; $route->value = $urlPrefix . $route->value; $routeDefaults = ['directory' => $directoryPrefix . 'V' . $version, 'controller' => $controllerName]; if ($parseActions) { $classReflection = new ReflectionClass($className); $classActions = $classReflection->getMethods(ReflectionMethod::IS_PUBLIC); foreach ($classActions as $method) { if (!$method->isFinal() && preg_match('@^action_(([^_]+)(?:_(.+))?)$@', $method->name, $actionMatches)) { /** @var RestfulAPI\Route $actionRoute */ $actionRoute = Annotations::getMethodAnnotation($method->name, self::annotationRoute, $className); if (NULL !== $actionRoute) { $actionRoute->name = $className . '::' . Arr::get($actionMatches, 1, $method->name); $actionRoute->value = $urlPrefix . $actionRoute->value; $actionRoute->defaults['action'] = Arr::get($actionMatches, 3); self::makeRoute($actionRoute, $routeDefaults); } } } } self::makeRoute($route, $routeDefaults); } }