GuzzleHttp - изменяем запросы и ответы с помощью Emitter-a (Subscriber-a)

В фреймворке 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())

Оцени публикацию:
  • 1,5
Оценили человек: 1

Похожие статьи:

Справочники и учебники:


Предложения и пожелания:
Ваше имя:
Ваш E-mail:
Сколько будет Οдин + Τри
Главная
X

youtube.com/watch?v=7hFivbgIEqk

При полном или частичном использовании материалов данного сайта, ссылка на сайт "yapro.ru" обязательна как на источник информации.
Автоматический импорт материалов и информации с сайта запрещен.
Copyrights © 2007 - 2018 YaPro.Ru

Главная » Веб-мастеру » PHP »