Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
| Total | |
0.00% |
0 / 1 |
|
0.00% |
0 / 3 |
CRAP | |
0.00% |
0 / 21 |
| HandlerStackConfigurator | |
0.00% |
0 / 1 |
|
0.00% |
0 / 3 |
56 | |
0.00% |
0 / 21 |
| __construct | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 3 |
|||
| initializeMiddlewares | |
0.00% |
0 / 1 |
20 | |
0.00% |
0 / 13 |
|||
| configure | |
0.00% |
0 / 1 |
6 | |
0.00% |
0 / 5 |
|||
| <?php | |
| /** | |
| * @file | |
| * Contains \Drupal\Core\Http\HandlerStackConfigurator. | |
| */ | |
| namespace Drupal\Core\Http; | |
| use GuzzleHttp\HandlerStack; | |
| use Symfony\Component\DependencyInjection\ContainerInterface; | |
| /** | |
| * Defines a class for configuring middlewares on the http handler stack. | |
| * | |
| * The http_client service requires a handler stack to perform http requests. | |
| * This is provided by the http_handler_stack service. Modules wishing to add | |
| * additional middlewares to the handler stack can create services and tag them | |
| * as http_client_middleware. Each service must contain an __invoke method that | |
| * returns a closure which will serve as the middleware. | |
| * | |
| * @see https://guzzle.readthedocs.org/en/latest/handlers-and-middleware.html | |
| * | |
| * @see \Drupal\Core\Http\Client | |
| * @see \Drupal\Core\Test\HttpClientMiddleware\TestHttpClientMiddleware | |
| */ | |
| class HandlerStackConfigurator { | |
| /** | |
| * Array of middlewares to add to the handler stack. | |
| * | |
| * @var callable[] | |
| */ | |
| protected $middlewares = NULL; | |
| /** | |
| * A list of used middleware service IDs. | |
| * | |
| * @var string[] | |
| */ | |
| protected $middlewareIds = []; | |
| /** | |
| * The service container. | |
| * | |
| * @var \Symfony\Component\DependencyInjection\ContainerInterface | |
| */ | |
| protected $container; | |
| /** | |
| * Contructs a new HandlerStackConfigurator object. | |
| * | |
| * @param \Symfony\Component\DependencyInjection\ContainerInterface $container | |
| * The service container. | |
| * @param string[] $middleware_ids | |
| * The middleware IDs. | |
| */ | |
| public function __construct(ContainerInterface $container, array $middleware_ids) { | |
| $this->middlewareIds = $middleware_ids; | |
| $this->container = $container; | |
| } | |
| /** | |
| * Ensures that the middlewares are initialized. | |
| */ | |
| protected function initializeMiddlewares() { | |
| if (!isset($this->middlewares)) { | |
| $this->middlewares = []; | |
| foreach ($this->middlewareIds as $middleware_id) { | |
| $middleware = $this->container->get($middleware_id); | |
| if (is_callable($middleware)) { | |
| $this->middlewares[$middleware_id] = $middleware(); | |
| } | |
| else { | |
| throw new \InvalidArgumentException('Middlewares need to implement __invoke, see https://guzzle.readthedocs.org/en/latest/handlers-and-middleware.html for more information about middlewares.'); | |
| } | |
| } | |
| } | |
| } | |
| /** | |
| * Configures the stack using services tagged as http_client_middleware. | |
| * | |
| * @param \GuzzleHttp\HandlerStack $handler_stack | |
| * The handler stack | |
| */ | |
| public function configure(HandlerStack $handler_stack) { | |
| $this->initializeMiddlewares(); | |
| foreach ($this->middlewares as $middleware_id => $middleware) { | |
| $handler_stack->push($middleware, $middleware_id); | |
| } | |
| } | |
| } |