Расширяет ответ Guzzle 6 по умолчанию

Как я могу расширить объект ответа по умолчанию?

$client = new GuzzleHttp\Client(['base_uri' => 'https://foo.com/api/']);
$response = $client->request('GET', 'test'); // I want my own class instance here

Текущая цель — добавить json функция в ответ (но это может быть что-то еще). Я потерял в документации 6 жрать.

0

Решение

Я бы настоятельно рекомендовал не расширять GuzzleHttp\Http\Message\Response через наследство. Рекомендуемый метод заключается в использовании композиции для реализации Psr\Http\Message\ResponseInterface и затем прокси все вызовы методов ResponseInterface для вложенного объекта. Это максимизирует его удобство использования.

class JsonResponse implements Psr\Http\Message\ResponseInterface {
public function __construct(Psr\Http\Message\ResponseInterface $response) {
$this->response = $response;
}

public function getHeaders() {
return $this->response->getHeaders();
}

public function getBodyAsJson() {
return json_decode($this->response->getBody()->__toString());
}
// I will leave the remaining methods of the Psr\Http\Message\ResponseInterface for you to look up.
}

Информацию о ResponseInterface можно найти Вот а также Вот

Вы не присоединяете его к клиенту, а присоединяете промежуточное программное обеспечение к обработчику стека.

$stack->push(GuzzleHttp\Middleware::mapResponse(function Psr\Http\Message\ResponseInterface $response) {
return new JsonResponse($response);
});

Более подробную информацию о промежуточном программном обеспечении Guzzle можно найти Вот.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]