/** * 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; }
/** * 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)); }