В фреймворке GuzzleHttp реализована событийная модель и это очень хорошо, т.к. позволяет нам подписываться на событие (запроса и ответа) и менять его как нам захочется.
Давайте не будем пока углублятся в теорию, а лучше сразу к практике.
$client = new GuzzleHttp\Client();
$emitter = $client->getEmitter();
$emitter->attach(new CustomeSubscriber);
и теперь выше указанный CustomeSubscriber:
use GuzzleHttp\Event\SubscriberInterface;
use GuzzleHttp\Event\BeforeEvent;
use GuzzleHttp\Event\CompleteEvent;
use GuzzleHttp\Post\PostBody;
use GuzzleHttp\Stream\Stream;
class CustomeSubscriber implements SubscriberInterface
{
/**
* @return array
*/
public function getEvents()
{
return [
'before' => ['onBefore', 'first'],
'complete' => ['onComplete'],
];
}
/**
* @param BeforeEvent $event
* @return void
*/
public function onBefore(BeforeEvent $event)
{
$body = $event->getRequest()->getBody();
if ($body instanceof PostBody && $fields = $body->getFields()) {
// вот тут делаем все что захотим с нашими $fields
$body->replaceFields($fields);
}
}
/**
* @param CompleteEvent $event
* @param $name
* @return void
*/
public function onComplete(CompleteEvent $event, $name)
{
$body = $event->getResponse()->getBody();
if ($body instanceof Stream && $content = json_decode($body, true)) {
// вот тут делаем все что захотим с нашим $content
$body->attach(fopen('php://temp', 'r+'));
$body->write(json_encode($content));
}
}
Обратите внимание на комментарии в коде, вот и все дела, удачки.
p.s. мои любимые способы дебага:
json_encode($response->getHeaders())
json_decode((string)$response->getBody())
Комментарии
Комментариев пока нет.