mirror of
https://github.com/guzzle/guzzle.git
synced 2025-02-25 18:43:22 +01:00
Using a small clone of a request when setting on a response to avoid a circular reference
This commit is contained in:
parent
aae077a12b
commit
db1d7ae3aa
@ -500,7 +500,8 @@ class Request extends AbstractMessage implements RequestInterface
|
|||||||
$body = $code >= 200 && $code < 300 ? $this->getResponseBody() : EntityBody::factory();
|
$body = $code >= 200 && $code < 300 ? $this->getResponseBody() : EntityBody::factory();
|
||||||
|
|
||||||
$this->response = new Response($code, null, $body);
|
$this->response = new Response($code, null, $body);
|
||||||
$this->response->setStatus($code, $status)->setRequest($this);
|
$this->response->setStatus($code, $status);
|
||||||
|
$this->setRequestOnResponse($this->response);
|
||||||
$this->dispatch('request.receive.status_line', array(
|
$this->dispatch('request.receive.status_line', array(
|
||||||
'request' => $this,
|
'request' => $this,
|
||||||
'line' => $data,
|
'line' => $data,
|
||||||
@ -524,7 +525,7 @@ class Request extends AbstractMessage implements RequestInterface
|
|||||||
{
|
{
|
||||||
// Never overwrite the request associated with the response (useful for redirect history)
|
// Never overwrite the request associated with the response (useful for redirect history)
|
||||||
if (!$response->getRequest()) {
|
if (!$response->getRequest()) {
|
||||||
$response->setRequest($this);
|
$this->setRequestOnResponse($response);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($queued) {
|
if ($queued) {
|
||||||
@ -789,4 +790,18 @@ class Request extends AbstractMessage implements RequestInterface
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set a request closure on a response
|
||||||
|
*
|
||||||
|
* @param Response $response
|
||||||
|
* @deprecated
|
||||||
|
*/
|
||||||
|
protected function setRequestOnResponse(Response $response)
|
||||||
|
{
|
||||||
|
$headers = $this->getRawHeaders();
|
||||||
|
$response->setRequest(function () use ($headers) {
|
||||||
|
return RequestFactory::getInstance()->fromMessage($headers);
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -104,7 +104,7 @@ class Response extends AbstractMessage
|
|||||||
protected $info = array();
|
protected $info = array();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var RequestInterface Request object that may or may not be set
|
* @var RequestInterface|callable Request object that may or may not be set
|
||||||
*/
|
*/
|
||||||
protected $request = null;
|
protected $request = null;
|
||||||
|
|
||||||
@ -343,16 +343,6 @@ class Response extends AbstractMessage
|
|||||||
return $headers . "\r\n";
|
return $headers . "\r\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Get the request object (or null) that is associated with this response
|
|
||||||
*
|
|
||||||
* @return RequestInterface
|
|
||||||
*/
|
|
||||||
public function getRequest()
|
|
||||||
{
|
|
||||||
return $this->request;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the response reason phrase- a human readable version of the numeric
|
* Get the response reason phrase- a human readable version of the numeric
|
||||||
* status code
|
* status code
|
||||||
@ -779,17 +769,33 @@ class Response extends AbstractMessage
|
|||||||
/**
|
/**
|
||||||
* Set the request object associated with the response
|
* Set the request object associated with the response
|
||||||
*
|
*
|
||||||
* @param RequestInterface $request The request object used to generate the response
|
* @param mixed $request The request object used to generate the response or a closure to return a request
|
||||||
*
|
*
|
||||||
* @return Response
|
* @return Response
|
||||||
|
* @deprecated
|
||||||
*/
|
*/
|
||||||
public function setRequest(RequestInterface $request)
|
public function setRequest($request)
|
||||||
{
|
{
|
||||||
$this->request = $request;
|
$this->request = $request;
|
||||||
|
|
||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the request object (or null) that is associated with this response
|
||||||
|
*
|
||||||
|
* @return RequestInterface
|
||||||
|
* @deprecated
|
||||||
|
*/
|
||||||
|
public function getRequest()
|
||||||
|
{
|
||||||
|
if (is_callable($this->request)) {
|
||||||
|
$this->request = call_user_func($this->request);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->request;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check if the response can be cached
|
* Check if the response can be cached
|
||||||
*
|
*
|
||||||
|
Loading…
x
Reference in New Issue
Block a user