Documentation

AddPathPlugin
in package
implements Plugin

FinalYes

Prepend a base path to the request URI. Useful for base API URLs like http://domain.com/api.

Tags
author

Sullivan Senechal soullivaneuh@gmail.com

Table of Contents

Interfaces

Plugin
A plugin is a middleware to transform the request and/or the response.

Properties

$uri  : UriInterface

Methods

__construct()  : mixed
handleRequest()  : Promise
Adds a prefix in the beginning of the URL's path.

Properties

Methods

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 $first will 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 $next more 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)


        
On this page

Search results