Интеграция с PHP Debug Bar

Каков наилучший способ записать все запросы на журчание на панель отладки php?

Обычно это событие какого-то типа, которое я мог бы прослушать и передать данные сборщику для панели отладки. Тем не менее, жрет, кажется, нет никаких событий. Вместо этого он использует промежуточное программное обеспечение и обработчики, которые я не совсем понимаю, как бы я интегрировал с отладочной панелью для регистрации запросов и временной шкалы, информации о продолжительности выполнения на панели отладки.

1 ответ

Я думаю, что я в основном понял это.

Я создал свое промежуточное программное обеспечение и зарегистрировал его у клиента.

Кастомное промежуточное ПО.

use GuzzleHttp\Promise\PromiseInterface;
use Psr\Http\Message\RequestInterface;
use Psr\Http\Message\ResponseInterface;
use Rocket\Cockpit\Facade\Container;
use Rocket\Moc\Debugbar\MocDebugBar;

class GuzzleHttpMiddleware {

    /** @var callable  */
    private $nextHandler;

    /**
     * @param callable $nextHandler Next handler to invoke.
     */
    public function __construct(callable $nextHandler) {
        $this->nextHandler = $nextHandler;
    }

    /**
     * @param RequestInterface $request
     * @param array            $options
     *
     * @return PromiseInterface
     */
    public function __invoke(RequestInterface $request, array $options)
    {
        $fn = $this->nextHandler;
        $debugbar = Container::get(MocDebugBar::class);

        $debugbar['rest']->addRequest($request);

        return $fn($request, $options)
            ->then(function (ResponseInterface $response) use ($request, $options) {

                return $response;

            });

    }

}

Регистрация пользовательского промежуточного программного обеспечения с помощью стека обработчиков - используется контейнер PHP League.

// Register http client.
$this->getContainer()->share(Client::class,function() {

    // In theory this "should" be available
    $config = load_class('Config');

    // Add debugbar middleware to handler stack.
    $stack = HandlerStack::create();
    $stack->after('prepare_body',function(callable $handler) {
        return new GuzzleHttpMiddleware($handler);
    },'debugbar');

    $client = new Client([
        'base_uri'=> $config->item('service_url'),
        'handler'=> $stack,
    ]);

    return $client;
},true);

Мне было трудно понять рабочий процесс обработчиков и обещаний, пока я на самом деле не изучал только библиотеку обещаний. Как только я это сделал, все стало намного более понятным.

Другие вопросы по тегам