5
5
use Http \Message \UriFactory ;
6
6
use Http \Promise \Promise ;
7
7
use Psr \Http \Message \RequestInterface ;
8
+ use Psr \Http \Message \UriInterface ;
8
9
9
10
class BaseUriPlugin implements Plugin
10
11
{
11
12
/**
12
- * @var string
13
+ * @var UriInterface
13
14
*/
14
15
private $ baseUri ;
15
16
16
17
/**
17
- * @var UriFactory
18
- */
19
- private $ factory ;
20
-
21
- /**
22
- * @param UriFactory $factory
23
- * @param string $baseUri
18
+ *
19
+ * @param UriInterface $baseUri
24
20
*/
25
- public function __construct (UriFactory $ factory , $ baseUri )
21
+ public function __construct (UriInterface $ baseUri )
26
22
{
27
- $ this ->factory = $ factory ;
28
23
$ this ->baseUri = $ baseUri ;
29
24
}
30
25
@@ -39,21 +34,39 @@ public function __construct(UriFactory $factory, $baseUri)
39
34
*/
40
35
public function handleRequest (RequestInterface $ request , callable $ next , callable $ first )
41
36
{
42
- $ uri = $ request ->getUri ();
43
- $ uriString = $ uri ->__toString ();
37
+ $ uriString = $ request ->getUri ()->__toString ();
44
38
if (!strpos ($ uriString , ':// ' )) {
45
- if (substr ($ uriString , 0 , 1 ) !== '/ ' ) {
46
- // Append baseUri this url
47
- $ request = $ request ->withUri ($ this ->factory ->createUri ($ this ->baseUri .$ uriString ));
39
+ $ request = $ request ->withUri ($ this ->modifyUri ($ request ->getUri ()));
40
+ }
41
+
42
+ return $ next ($ request );
43
+ }
44
+
45
+ /**
46
+ * @param UriInterface $uri
47
+ *
48
+ * @return UriInterface
49
+ */
50
+ private function modifyUri (UriInterface $ uri )
51
+ {
52
+ $ uriString = $ uri ->__toString ();
53
+ if (substr ($ uriString , 0 , 1 ) === '/ ' ) {
54
+ // Replace/Add path and query to the baseUri
55
+ $ modifiedUri = $ this ->baseUri ->withPath ($ uri ->getPath ());
56
+ $ modifiedUri = $ modifiedUri ->withQuery ($ uri ->getQuery ());
57
+ } else {
58
+ // Append baseUri this url
59
+ if ("" !== $ query = $ this ->baseUri ->getQuery ()) {
60
+ // Append the uri on the query
61
+ $ modifiedUri = $ this ->baseUri ->withQuery ($ query .$ uriString );
48
62
} else {
49
- // Replace add/replace path and query to the baseUri
50
- $ modifiedUri = $ this ->factory ->createUri ($ this ->baseUri );
51
- $ modifiedUri = $ modifiedUri ->withPath ($ uri ->getPath ());
52
- $ modifiedUri = $ modifiedUri ->withQuery ($ uri ->getQuery ());
53
- $ request = $ request ->withUri ($ modifiedUri );
63
+ // Append the uri on path and query
64
+ list ($ path , $ query ) = explode ('? ' , $ uriString , 2 );
65
+ $ modifiedUri = $ this ->baseUri ->withPath ($ this ->baseUri ->getPath ().$ path );
66
+ $ modifiedUri = $ modifiedUri ->withQuery ($ query );
54
67
}
55
68
}
56
69
57
- return $ next ( $ request ) ;
70
+ return $ modifiedUri ;
58
71
}
59
72
}
0 commit comments