Skip to content

Commit 7eedd34

Browse files
committed
feature #119 Implement ValueResolverInterface (derrabus)
This PR was merged into the 2.2-dev branch. Discussion ---------- Implement ValueResolverInterface Follows symfony/symfony#47363 Commits ------- 0b54b85 Implement ValueResolverInterface
2 parents 6b2f5df + 0b54b85 commit 7eedd34

File tree

4 files changed

+58
-2
lines changed

4 files changed

+58
-2
lines changed

ArgumentValueResolver/PsrServerRequestResolver.php

+10-1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
use Symfony\Bridge\PsrHttpMessage\HttpMessageFactoryInterface;
1818
use Symfony\Component\HttpFoundation\Request;
1919
use Symfony\Component\HttpKernel\Controller\ArgumentValueResolverInterface;
20+
use Symfony\Component\HttpKernel\Controller\ValueResolverInterface as BaseValueResolverInterface;
2021
use Symfony\Component\HttpKernel\ControllerMetadata\ArgumentMetadata;
2122

2223
/**
@@ -25,7 +26,7 @@
2526
* @author Iltar van der Berg <[email protected]>
2627
* @author Alexander M. Turek <[email protected]>
2728
*/
28-
final class PsrServerRequestResolver implements ArgumentValueResolverInterface
29+
final class PsrServerRequestResolver implements ArgumentValueResolverInterface, ValueResolverInterface
2930
{
3031
private const SUPPORTED_TYPES = [
3132
ServerRequestInterface::class => true,
@@ -45,6 +46,10 @@ public function __construct(HttpMessageFactoryInterface $httpMessageFactory)
4546
*/
4647
public function supports(Request $request, ArgumentMetadata $argument): bool
4748
{
49+
if ($this instanceof BaseValueResolverInterface) {
50+
trigger_deprecation('symfony/psr-http-message-bridge', '2.3', 'Method "%s" is deprecated, call "resolve()" without calling "supports()" first.', __METHOD__);
51+
}
52+
4853
return self::SUPPORTED_TYPES[$argument->getType()] ?? false;
4954
}
5055

@@ -53,6 +58,10 @@ public function supports(Request $request, ArgumentMetadata $argument): bool
5358
*/
5459
public function resolve(Request $request, ArgumentMetadata $argument): \Traversable
5560
{
61+
if (!isset(self::SUPPORTED_TYPES[$argument->getType()])) {
62+
return;
63+
}
64+
5665
yield $this->httpMessageFactory->createRequest($request);
5766
}
5867
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
<?php
2+
3+
/*
4+
* This file is part of the Symfony package.
5+
*
6+
* (c) Fabien Potencier <[email protected]>
7+
*
8+
* For the full copyright and license information, please view the LICENSE
9+
* file that was distributed with this source code.
10+
*/
11+
12+
namespace Symfony\Bridge\PsrHttpMessage\ArgumentValueResolver;
13+
14+
use Symfony\Component\HttpKernel\Controller\ValueResolverInterface as BaseValueResolverInterface;
15+
16+
if (interface_exists(BaseValueResolverInterface::class)) {
17+
/** @internal */
18+
interface ValueResolverInterface extends BaseValueResolverInterface
19+
{
20+
}
21+
} else {
22+
/** @internal */
23+
interface ValueResolverInterface
24+
{
25+
}
26+
}

Tests/ArgumentValueResolver/PsrServerRequestResolverTest.php

+20
Original file line numberDiff line numberDiff line change
@@ -15,16 +15,21 @@
1515
use Psr\Http\Message\MessageInterface;
1616
use Psr\Http\Message\RequestInterface;
1717
use Psr\Http\Message\ServerRequestInterface;
18+
use Symfony\Bridge\PhpUnit\ExpectDeprecationTrait;
1819
use Symfony\Bridge\PsrHttpMessage\ArgumentValueResolver\PsrServerRequestResolver;
1920
use Symfony\Bridge\PsrHttpMessage\HttpMessageFactoryInterface;
2021
use Symfony\Component\HttpFoundation\Request;
2122
use Symfony\Component\HttpKernel\Controller\ArgumentResolver;
23+
use Symfony\Component\HttpKernel\Controller\ValueResolverInterface;
24+
use Symfony\Component\HttpKernel\ControllerMetadata\ArgumentMetadata;
2225

2326
/**
2427
* @author Alexander M. Turek <[email protected]>
2528
*/
2629
final class PsrServerRequestResolverTest extends TestCase
2730
{
31+
use ExpectDeprecationTrait;
32+
2833
public function testServerRequest()
2934
{
3035
$symfonyRequest = $this->createMock(Request::class);
@@ -55,6 +60,21 @@ public function testMessage()
5560
self::assertSame([$psrRequest], $resolver->getArguments($symfonyRequest, static function (MessageInterface $request): void {}));
5661
}
5762

63+
/**
64+
* @group legacy
65+
*/
66+
public function testDeprecatedSupports()
67+
{
68+
if (!interface_exists(ValueResolverInterface::class)) {
69+
$this->markTestSkipped('Requires symfony/http-kernel 6.2.');
70+
}
71+
72+
$resolver = new PsrServerRequestResolver($this->createStub(HttpMessageFactoryInterface::class));
73+
74+
$this->expectDeprecation('Since symfony/psr-http-message-bridge 2.3: Method "Symfony\Bridge\PsrHttpMessage\ArgumentValueResolver\PsrServerRequestResolver::supports" is deprecated, call "resolve()" without calling "supports()" first.');
75+
$resolver->supports($this->createStub(Request::class), $this->createStub(ArgumentMetadata::class));
76+
}
77+
5878
private function bootstrapResolver(Request $symfonyRequest, ServerRequestInterface $psrRequest): ArgumentResolver
5979
{
6080
$messageFactory = $this->createMock(HttpMessageFactoryInterface::class);

composer.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
"require": {
1919
"php": ">=7.2.5",
2020
"psr/http-message": "^1.0 || ^2.0",
21+
"symfony/deprecation-contracts": "^2.5 || ^3.0",
2122
"symfony/http-foundation": "^5.4 || ^6.0"
2223
},
2324
"require-dev": {
@@ -41,7 +42,7 @@
4142
},
4243
"extra": {
4344
"branch-alias": {
44-
"dev-main": "2.2-dev"
45+
"dev-main": "2.3-dev"
4546
}
4647
}
4748
}

0 commit comments

Comments
 (0)