示例#1
0
 /**
  * Send request
  * 
  * @param String $method
  * @param String $uri
  * @param Array $params
  * @param Mixed $data
  * @param Array $headers
  * @return \Spore\HttpFoundation\Response
  */
 public function call($method, $uri, array $params, $data = null, array $headers = array())
 {
     $method = strtoupper($method);
     $parts = array();
     if (strpos($uri, '/') !== false) {
         $parts = array_filter(explode('/', $uri));
     }
     foreach ($params as $key => $value) {
         $uri = str_replace(':' . $key, $value, $uri);
     }
     if (!empty($parts)) {
         foreach ($parts as $value) {
             if ($value[0] == ':') {
                 $key = substr($value, 1);
                 if (isset($params[$key])) {
                     unset($params[$key]);
                 }
             }
         }
     }
     $request = new Request();
     $request->setUri($uri);
     $request->setMethod($method);
     if (isset($this->formats[$this->format])) {
         $request->headers->set('Accept', $this->formats[$this->format]);
     } else {
         $request->headers->set('Accept', '');
     }
     if (!empty($params)) {
         $request->setQuery($params);
     }
     if (!empty($data)) {
         $request->setData($data);
     }
     $env = new ArrayObject(array('format' => $this->format));
     $middlewares = $this->getMiddlewares();
     foreach ($middlewares as $middleware) {
         $middleware->processRequest($request, $env);
     }
     $response = $this->getAdapter()->execute($request);
     foreach ($middlewares as $middleware) {
         $middleware->processResponse($response, $env);
     }
     unset($middlewares);
     return $response;
 }
示例#2
0
 /**
  * Send request
  * 
  * @param String $method
  * @param String $endpoint
  * @param Array $params
  * @param Mixed $data
  * @param Array $headers
  * @return \Spore\HttpFoundation\Response
  * @throws \InvalidArgumentException, \RuntimeException
  */
 public function call($method, $endpoint, array $params, $data = null, array $headers = array())
 {
     $method = strtoupper($method);
     if (isset($this->spec['methods'][$endpoint])) {
         $spec = $this->spec['methods'][$endpoint];
         if ($spec['method'] != $method) {
             throw new InvalidArgumentException(sprintf("Method %s is not allowed.", $method));
         }
         $params = $this->verifyParameters($params, isset($spec['required_params']) ? $spec['required_params'] : array(), isset($spec['optional_params']) ? $spec['optional_params'] : array());
         $uri = rtrim($this->spec['base_url'], '/') . $spec['path'];
         foreach ($params as $key => $value) {
             $uri = str_replace(':' . $key, $value, $uri);
         }
         $request = new Request();
         $request->setUri($uri);
         $request->setMethod($method);
         if (!empty($data)) {
             $request->setData($data);
         }
         $env = new ArrayObject(array('format' => $this->format));
         foreach ($this->middlewares as $middleware) {
             $middleware->processRequest($request, $env);
         }
         $response = $this->getAdapter()->execute($request);
         if (isset($spec['expected'])) {
             if (!in_array($response->getStatusCode(), $spec['expected'])) {
                 throw new RuntimeException(Response::$statusTexts[$response->getStatusCode()]);
             }
         }
         foreach ($this->middlewares as $middleware) {
             $middleware->processResponse($response, $env);
         }
         return $response;
     }
     throw new InvalidArgumentException(sprintf("Endpoint %s is not defined.", $endpoint));
 }