Каков наилучший способ записать все запросы на журчание на панель отладки php?
Обычно это событие какого-то типа, которое я мог бы прослушать и передать данные сборщику для панели отладки. Тем не менее, жрет, кажется, нет никаких событий. Вместо этого он использует промежуточное программное обеспечение и обработчики, которые я не совсем понимаю, как бы я интегрировал с отладочной панелью для регистрации запросов и временной шкалы, информации о продолжительности выполнения на панели отладки.
Я думаю, что я в основном понял это.
Я создал свое промежуточное ПО и зарегистрировал его у клиента.
Кастомное промежуточное ПО.
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);
Мне было трудно понять рабочий процесс обработчиков и обещаний, пока я на самом деле не изучал только библиотеку обещаний. Как только я это сделал, все стало намного понятнее.
Других решений пока нет …