예제 #1
0
파일: Request.php 프로젝트: Victopia/prefw
 /**
  * Fire this request object as a request.
  *
  * @param {?Resolver} $resolver If provided, this request will be resolved by
  *                              it instead of creating a real HTTP request.
  *                              A real CURL request will be made upon omission.
  * @param {?Response} $response Response object for the request, a new response
  *                              object will be created if omitted.
  *
  * @return {Response} The response object after resolution.
  */
 public function send(Resolver $resolver = null, Response $response = null)
 {
     if ($this->resolver) {
         trigger_error('Active request cannot be fired again.', E_USER_WARNING);
         return;
     }
     if ($resolver) {
         $this->resolver = $resolver;
         $resolver->run($this, $response);
         return $resolver->response();
     }
     // TODO: Handle file uploads?
     // Creates a CURL request upon current request context.
     Net::httpRequest(array('url' => http_build_url($this->uri()), 'data' => array_replace_recursive((array) $this->param(), (array) $this->file()), 'type' => $this->method(), 'headers' => $this->header(), 'success' => function ($responseText, $options) use(&$response) {
         if ($response === null) {
             $response = new Response();
         }
         foreach (array_filter(preg_split('/\\r?\\n/', @$options['response']['headers'])) as $value) {
             $response->header($value);
         }
         $response->send($responseText, (int) @$options['status']);
     }, 'failure' => function ($errNum, $errMsg, $options) {
         throw new FrameworkException($errMsg, $errNum);
     }));
     return $response;
 }