2023-10-14 13:36:39 +08:00
< ? php
/*
* This file is part of the Symfony package .
*
* ( c ) Fabien Potencier < fabien @ symfony . com >
*
* For the full copyright and license information , please view the LICENSE
* file that was distributed with this source code .
*/
namespace Symfony\Bridge\PsrHttpMessage\ArgumentValueResolver ;
use Psr\Http\Message\MessageInterface ;
use Psr\Http\Message\RequestInterface ;
use Psr\Http\Message\ServerRequestInterface ;
use Symfony\Bridge\PsrHttpMessage\HttpMessageFactoryInterface ;
use Symfony\Component\HttpFoundation\Request ;
use Symfony\Component\HttpKernel\Controller\ArgumentValueResolverInterface ;
2023-10-16 10:40:36 +08:00
use Symfony\Component\HttpKernel\Controller\ValueResolverInterface as BaseValueResolverInterface ;
2023-10-14 13:36:39 +08:00
use Symfony\Component\HttpKernel\ControllerMetadata\ArgumentMetadata ;
/**
* Injects the RequestInterface , MessageInterface or ServerRequestInterface when requested .
*
* @ author Iltar van der Berg < kjarli @ gmail . com >
* @ author Alexander M . Turek < me @ derrabus . de >
*/
2023-10-16 10:40:36 +08:00
final class PsrServerRequestResolver implements ArgumentValueResolverInterface , ValueResolverInterface
2023-10-14 13:36:39 +08:00
{
private const SUPPORTED_TYPES = [
ServerRequestInterface :: class => true ,
RequestInterface :: class => true ,
MessageInterface :: class => true ,
];
private $httpMessageFactory ;
public function __construct ( HttpMessageFactoryInterface $httpMessageFactory )
{
$this -> httpMessageFactory = $httpMessageFactory ;
}
/**
* { @ inheritdoc }
*/
public function supports ( Request $request , ArgumentMetadata $argument ) : bool
{
2023-10-16 10:40:36 +08:00
if ( $this instanceof BaseValueResolverInterface ) {
trigger_deprecation ( 'symfony/psr-http-message-bridge' , '2.3' , 'Method "%s" is deprecated, call "resolve()" without calling "supports()" first.' , __METHOD__ );
}
2023-10-14 13:36:39 +08:00
return self :: SUPPORTED_TYPES [ $argument -> getType ()] ? ? false ;
}
/**
* { @ inheritdoc }
*/
public function resolve ( Request $request , ArgumentMetadata $argument ) : \Traversable
{
2023-10-16 10:40:36 +08:00
if ( ! isset ( self :: SUPPORTED_TYPES [ $argument -> getType ()])) {
return ;
}
2023-10-14 13:36:39 +08:00
yield $this -> httpMessageFactory -> createRequest ( $request );
}
}