public function resolve(RequestInterface $request, Context $context) { $sql = 'SELECT id, methods, path, controller, config FROM fusio_routes WHERE status = 1 AND methods LIKE :method'; $method = $request->getMethod(); $pathMatcher = new PathMatcher($request->getUri()->getPath()); $result = $this->connection->fetchAll($sql, array('method' => '%' . $method . '%')); foreach ($result as $row) { $parameters = array(); if (in_array($method, explode('|', $row['methods'])) && $pathMatcher->match($row['path'], $parameters)) { $config = $row['config']; $config = !empty($config) ? unserialize($config) : null; $context->set(Context::KEY_FRAGMENT, $parameters); $context->set(Context::KEY_PATH, $row['path']); $context->set(Context::KEY_SOURCE, $row['controller']); $context->set('fusio.config', $config); $context->set('fusio.routeId', $row['id']); return $request; } } return null; }
public function resolve(RequestInterface $request, Context $context) { $routingCollection = $this->routingParser->getCollection(); $method = $request->getMethod(); $pathMatcher = new PathMatcher($request->getUri()->getPath()); foreach ($routingCollection as $routing) { $parameters = array(); if (in_array($method, $routing[RoutingCollection::ROUTING_METHODS]) && $pathMatcher->match($routing[RoutingCollection::ROUTING_PATH], $parameters)) { $source = $routing[RoutingCollection::ROUTING_SOURCE]; if ($source[0] == '~') { $request->setUri(new Uri(substr($source, 1))); return $this->resolve($request, $context); } $context->set(Context::KEY_PATH, $routing[RoutingCollection::ROUTING_PATH]); $context->set(Context::KEY_FRAGMENT, $parameters); $context->set(Context::KEY_SOURCE, $source); return $request; } } return null; }
public function getDocumentation($sourcePath) { $matcher = new PathMatcher($sourcePath); $collections = $this->routingParser->getCollection(); foreach ($collections as $collection) { list($methods, $path, $source) = $collection; $parts = explode('::', $source, 2); $className = isset($parts[0]) ? $parts[0] : null; if (class_exists($className) && $matcher->match($path)) { $request = new Request(new Uri('/'), 'GET'); $response = new Response(); $context = $this->newContext($collection); $controller = $this->newController($className, $request, $response, $context); if ($controller instanceof DocumentedInterface) { $documentation = $controller->getDocumentation(); if ($documentation instanceof DocumentationInterface) { return $documentation; } } } } return null; }