88 lines
3 KiB
PHP
88 lines
3 KiB
PHP
<?php
|
|
|
|
/**
|
|
* Slim Framework (https://slimframework.com)
|
|
*
|
|
* @license https://github.com/slimphp/Slim/blob/4.x/LICENSE.md (MIT License)
|
|
*/
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace Slim\Factory;
|
|
|
|
use RuntimeException;
|
|
use Slim\Factory\Psr17\Psr17Factory;
|
|
use Slim\Factory\Psr17\Psr17FactoryProvider;
|
|
use Slim\Factory\Psr17\SlimHttpServerRequestCreator;
|
|
use Slim\Interfaces\Psr17FactoryProviderInterface;
|
|
use Slim\Interfaces\ServerRequestCreatorInterface;
|
|
|
|
class ServerRequestCreatorFactory
|
|
{
|
|
protected static ?Psr17FactoryProviderInterface $psr17FactoryProvider = null;
|
|
|
|
protected static ?ServerRequestCreatorInterface $serverRequestCreator = null;
|
|
|
|
protected static bool $slimHttpDecoratorsAutomaticDetectionEnabled = true;
|
|
|
|
public static function create(): ServerRequestCreatorInterface
|
|
{
|
|
return static::determineServerRequestCreator();
|
|
}
|
|
|
|
/**
|
|
* @throws RuntimeException
|
|
*/
|
|
public static function determineServerRequestCreator(): ServerRequestCreatorInterface
|
|
{
|
|
if (static::$serverRequestCreator) {
|
|
return static::attemptServerRequestCreatorDecoration(static::$serverRequestCreator);
|
|
}
|
|
|
|
$psr17FactoryProvider = static::$psr17FactoryProvider ?? new Psr17FactoryProvider();
|
|
|
|
/** @var Psr17Factory $psr17Factory */
|
|
foreach ($psr17FactoryProvider->getFactories() as $psr17Factory) {
|
|
if ($psr17Factory::isServerRequestCreatorAvailable()) {
|
|
$serverRequestCreator = $psr17Factory::getServerRequestCreator();
|
|
return static::attemptServerRequestCreatorDecoration($serverRequestCreator);
|
|
}
|
|
}
|
|
|
|
throw new RuntimeException(
|
|
"Could not detect any ServerRequest creator implementations. " .
|
|
"Please install a supported implementation in order to use `App::run()` " .
|
|
"without having to pass in a `ServerRequest` object. " .
|
|
"See https://github.com/slimphp/Slim/blob/4.x/README.md for a list of supported implementations."
|
|
);
|
|
}
|
|
|
|
protected static function attemptServerRequestCreatorDecoration(
|
|
ServerRequestCreatorInterface $serverRequestCreator
|
|
): ServerRequestCreatorInterface {
|
|
if (
|
|
static::$slimHttpDecoratorsAutomaticDetectionEnabled
|
|
&& SlimHttpServerRequestCreator::isServerRequestDecoratorAvailable()
|
|
) {
|
|
return new SlimHttpServerRequestCreator($serverRequestCreator);
|
|
}
|
|
|
|
return $serverRequestCreator;
|
|
}
|
|
|
|
public static function setPsr17FactoryProvider(Psr17FactoryProviderInterface $psr17FactoryProvider): void
|
|
{
|
|
static::$psr17FactoryProvider = $psr17FactoryProvider;
|
|
}
|
|
|
|
public static function setServerRequestCreator(ServerRequestCreatorInterface $serverRequestCreator): void
|
|
{
|
|
self::$serverRequestCreator = $serverRequestCreator;
|
|
}
|
|
|
|
public static function setSlimHttpDecoratorsAutomaticDetection(bool $enabled): void
|
|
{
|
|
static::$slimHttpDecoratorsAutomaticDetectionEnabled = $enabled;
|
|
}
|
|
}
|