示例#1
0
    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;
    }
示例#2
0
 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;
 }
示例#3
0
 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;
 }