PluginProbe
DecaLog / 4.4.0
DecaLog v4.4.0
3.0.2 3.1.0 3.10.0 3.2.0 3.3.0 3.4.0 3.4.1 3.5.0 3.5.1 3.6.0 3.6.1 3.6.2 3.6.3 3.7.0 3.7.1 3.8.0 3.9.0 3.9.1 4.0.0 4.1.0 4.2.0 4.3.0 4.3.1 4.4.0 4.5.0 All 75 releases
decalog / includes / libraries / http / client-common / Plugin / QueryDefaultsPlugin.php

QueryDefaultsPlugin.php in DecaLog 4.4.0, at includes/libraries/http/client-common/Plugin/QueryDefaultsPlugin.php

51 lines 1.2 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 declare(strict_types=1);
4
5 namespace Http\Client\Common\Plugin;
6
7 use Http\Client\Common\Plugin;
8 use Http\Promise\Promise;
9 use Psr\Http\Message\RequestInterface;
10
11 /**
12 * Set query to default value if it does not exist.
13 *
14 * If a given query parameter already exists the value wont be replaced and the request wont be changed.
15 *
16 * @author Tobias Nyholm <tobias.nyholm@gmail.com>
17 */
18 final class QueryDefaultsPlugin implements Plugin
19 {
20 /**
21 * @var array
22 */
23 private $queryParams = [];
24
25 /**
26 * @param array $queryParams Hashmap of query name to query value. Names and values must not be url encoded as
27 * this plugin will encode them
28 */
29 public function __construct(array $queryParams)
30 {
31 $this->queryParams = $queryParams;
32 }
33
34 /**
35 * {@inheritdoc}
36 */
37 public function handleRequest(RequestInterface $request, callable $next, callable $first): Promise
38 {
39 $uri = $request->getUri();
40
41 parse_str($uri->getQuery(), $query);
42 $query += $this->queryParams;
43
44 $request = $request->withUri(
45 $uri->withQuery(http_build_query($query))
46 );
47
48 return $next($request);
49 }
50 }
51