for testing and deploying your application
for finding and fixing issues
for empowering human code reviews
<?php
declare(strict_types=1);
namespace Http\Client\Common;
use Http\Client\HttpAsyncClient;
use Psr\Http\Client\ClientInterface;
/**
* Build an instance of a PluginClient with a dynamic list of plugins.
*
* @author Baptiste Clavié <[email protected]>
*/
final class PluginClientBuilder
{
/** @var Plugin[][] List of plugins ordered by priority [priority => Plugin[]]). */
private $plugins = [];
/** @var array Array of options to give to the plugin client */
private $options = [];
* @param int $priority Priority of the plugin. The higher comes first.
public function addPlugin(Plugin $plugin, int $priority = 0): self
$this->plugins[$priority][] = $plugin;
return $this;
}
public function setOption(string $name, $value): self
$this->options[$name] = $value;
public function removeOption(string $name): self
unset($this->options[$name]);
* @param ClientInterface | HttpAsyncClient $client
public function createClient($client): PluginClient
if (!$client instanceof ClientInterface && !$client instanceof HttpAsyncClient) {
throw new \RuntimeException('You must provide a valid http client');
$plugins = $this->plugins;
if (0 === count($plugins)) {
$plugins[] = [];
krsort($plugins);
$plugins = array_merge(...$plugins);
return new PluginClient(
$client,
array_values($plugins),
$this->options
);