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