The component provides the ability to manage global PHP variables and obtain their state depending on WebView requests:
$_SERVER$_POST$_GET$_FILES- etc.
This component is not included by default in the
boson-php/runtimeand must be installed separately.
#Installation
Via Composer:
composer require boson-php/globals-provider
Requirements:
PHP ^8.4
#The $_SERVER Superglobals
The component provides several implementations of
ServerGlobalsProviderInterface for managing PHP $_SERVER superglobals:
Boson\Component\GlobalsProvider\DefaultServerGlobalsProviderBoson\Component\GlobalsProvider\StaticServerGlobalsProviderBoson\Component\GlobalsProvider\CompoundServerGlobalsProviderBoson\Component\GlobalsProvider\EmptyServerGlobalsProvider
#Default Provider
The Boson\Component\GlobalsProvider\DefaultServerGlobalsProvider
provides basic request-aware parameters:
use Boson\Component\GlobalsProvider\DefaultServerGlobalsProvider; use Boson\Component\Http\Request; $provider = new DefaultServerGlobalsProvider(); $globals = $provider->getServerGlobals(new Request( method: 'POST', url: 'https://example.com/path?query=value', headers: ['Host' => 'example.com'] )); // // Expected output: // // array:9 [ // "REQUEST_TIME_FLOAT" => 1749130915.4316 // "REQUEST_TIME" => 1749130915 // "REQUEST_METHOD" => "POST" // "QUERY_STRING" => "query=value" // "PATH_INFO" => "/path" // "REMOTE_ADDR" => "example.com" // "REMOTE_PORT" => 80 // "REQUEST_URI" => "/path?query=value" // "HTTP_HOST" => "example.com" // ] //
This provider automatically sets request-dependent variables:
- Request time parameters (
REQUEST_TIME,REQUEST_TIME_FLOAT) - Request information (
REQUEST_METHOD,REQUEST_URI,HTTP_HOST, etc.) - Request headers (converted to uppercase with
HTTP_prefix)
PSR-20 Clock
The DefaultServerGlobalsProvider supports custom time handling
through PSR-20 Clock interface:
use Boson\Component\GlobalsProvider\DefaultServerGlobalsProvider; use Psr\Clock\ClockInterface; class CustomClock implements ClockInterface { public function now(): \DateTimeImmutable { return new \DateTimeImmutable('2024-01-01 12:00:00'); } } $provider = new DefaultServerGlobalsProvider( clock: new CustomClock(), );
The PSR-20 Clock component is used to generate the REQUEST_TIME
and REQUEST_TIME_FLOAT parameters.
[
"REQUEST_TIME_FLOAT" => 1749130915.4316,
"REQUEST_TIME" => 1749130915,
// ...
]
This allows for consistent time-based testing and custom time handling in your application.
#Static Provider
The Boson\Component\GlobalsProvider\StaticServerGlobalsProvider provides
constant server parameters that are independent of the request:
use Boson\Component\GlobalsProvider\StaticServerGlobalsProvider; // With default superglobal $_SERVER values $provider = new StaticServerGlobalsProvider(); // Or with custom values $provider = new StaticServerGlobalsProvider([ 'DOCUMENT_ROOT' => '/custom/root', 'SERVER_NAME' => 'example.com', 'SERVER_PORT' => '8080', 'SERVER_SOFTWARE' => 'Custom Server' ]);
The provider ensures:
- Valid document root (from
SCRIPT_FILENAMEorDOCUMENT_ROOT) - Default server name (
SERVER_NAME) - Default server port (
SERVER_PORT) - Default server software (
SERVER_SOFTWARE) - etc...
#Compound Provider
The Boson\Component\GlobalsProvider\CompoundServerGlobalsProvider combines
multiple providers into a single one:
use Boson\Component\GlobalsProvider\CompoundServerGlobalsProvider; use Boson\Component\GlobalsProvider\DefaultServerGlobalsProvider; use Boson\Component\GlobalsProvider\StaticServerGlobalsProvider; $providers = [ // PHP default $_SERVER superglobals provider new StaticServerGlobalsProvider(), // Request-aware $_SERVER superglobals provider new DefaultServerGlobalsProvider(), // Custom superglobals provider new StaticServerGlobalsProvider([ 'SERVER_SOFTWARE' => 'Custom Server' ]), ]; $provider = new CompoundServerGlobalsProvider($providers);
The compound provider merges results from all providers in the order they are provided. Later providers can override values from earlier ones.
#Empty Provider
The Boson\Component\GlobalsProvider\EmptyServerGlobalsProvider
returns an empty array of server globals:
use Boson\Component\GlobalsProvider\EmptyServerGlobalsProvider; $provider = new EmptyServerGlobalsProvider(); $globals = $provider->getServerGlobals($request); // Returns []
#The $_POST Superglobals
The component does not currently provide functionality for obtaining PHP
superglobal $_POST variables.
#The $_GET Superglobals
The component does not currently provide functionality for obtaining PHP
superglobal $_GET variables.
#The $_FILES Superglobals
The component does not currently provide functionality for obtaining PHP
superglobal $_FILES variables.