AddPathPlugin
in package
implements
Plugin
Prepend a base path to the request URI. Useful for base API URLs like http://domain.com/api.
Tags
Table of Contents
Interfaces
- Plugin
- A plugin is a middleware to transform the request and/or the response.
Properties
Methods
- __construct() : mixed
- handleRequest() : Promise
- Adds a prefix in the beginning of the URL's path.
Properties
$uri
private
UriInterface
$uri
Methods
__construct()
public
__construct(UriInterface $uri) : mixed
Parameters
- $uri : UriInterface
handleRequest()
Adds a prefix in the beginning of the URL's path.
public
handleRequest(RequestInterface $request, callable $next, callable $first) : Promise
The prefix is not added if that prefix is already on the URL's path. This will fail on the edge
case of the prefix being repeated, for example if https://example.com/api/api/foo is a valid
URL on the server and the configured prefix is /api.
We looked at other solutions, but they are all much more complicated, while still having edge cases:
- Doing an spl_object_hash on
$firstwill lead to collisions over time because over time the hash can collide. - Have the PluginClient provide a magic header to identify the request chain and only apply this plugin once.
There are 2 reasons for the AddPathPlugin to be executed twice on the same request:
- A plugin can restart the chain by calling
$first, e.g. redirect - A plugin can call
$nextmore than once, e.g. retry
Depending on the scenario, the path should or should not be added. E.g. $first could
be called after a redirect response from the server. The server likely already has the
correct path.
No solution fits all use cases. This implementation will work fine for the common use cases. If you have a specific situation where this is not the right thing, you can build a custom plugin that does exactly what you need.
Parameters
- $request : RequestInterface
- $next : callable
-
Next middleware in the chain, the request is passed as the first argument
- $first : callable
-
First middleware in the chain, used to to restart a request
Return values
Promise —Resolves a PSR-7 Response or fails with an Http\Client\Exception (The same as HttpAsyncClient)