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

Новые заметки:

Про что мы забываем когда делаем оценку задачи по времени

Список вопросов для собеседования разработчика по телефону

Symfony2 авторизация без Doctrine2 для чайника

Phpstorm7 LiveEdit

Жесткий хабр или не хабр, тогда кто?

Яндекс.Деньги мошенничество

Как узнать какие страницы в поиске яндекса или это секрет

Последние комменты:

Yapro CMS:

Здравствуйте, Гость | Войти | Регистрация | Карта сайта | RSS ленты | Ошибка в тексте? Выделите её мышкой и нажмите: Ctrl + Enter

youtube.com/watch?v=7hFivbgIEqk

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

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