Skip to content

Commit 4325672

Browse files
committed
Merge branch '6.3' into 6.4
* 6.3: [HttpKernel] Move @internal from AbstractSessionListener class to its methods and properties [Validator] Add missing translation for Greek (el) Add missing ID translations Add missing translations for Vietnamese (vi) [Validator] Add missing translations for Japanese. [Validator] Add missing translation for Russia (ru) #53041 [Validator] add missing Azerbaijani translation Add missing FR translation Add missing spanish translation [Validator] Update Hungarian translations [Validator] add missing Turkish translation and correct grammar Add missing romanian translation Add missing translation for Ukrainian (uk) #53050 sv_SE translation trans-unit id 110 [Validator] Add missing Croation translation Add missing translation into validators.pl.xlf [Validator] add missing lv translation [Validator] Added missing dutch translation [HttpKernel] Fix request attribute value ignored with pinned resolvers
2 parents f3b65a6 + b097dca commit 4325672

File tree

3 files changed

+69
-7
lines changed

3 files changed

+69
-7
lines changed

Controller/ArgumentResolver.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ public function getArguments(Request $request, callable $controller, \Reflection
7373

7474
$argumentValueResolvers = [
7575
$this->namedResolvers->get($resolverName),
76+
new RequestAttributeValueResolver(),
7677
new DefaultValueResolver(),
7778
];
7879
}

EventListener/AbstractSessionListener.php

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,28 +35,36 @@
3535
*
3636
* @author Johannes M. Schmitt <[email protected]>
3737
* @author Tobias Schultze <http://tobion.de>
38-
*
39-
* @internal
4038
*/
4139
abstract class AbstractSessionListener implements EventSubscriberInterface, ResetInterface
4240
{
4341
public const NO_AUTO_CACHE_CONTROL_HEADER = 'Symfony-Session-NoAutoCacheControl';
4442

43+
/**
44+
* @internal
45+
*/
4546
protected ?ContainerInterface $container;
47+
4648
private bool $debug;
4749

4850
/**
4951
* @var array<string, mixed>
5052
*/
5153
private array $sessionOptions;
5254

55+
/**
56+
* @internal
57+
*/
5358
public function __construct(ContainerInterface $container = null, bool $debug = false, array $sessionOptions = [])
5459
{
5560
$this->container = $container;
5661
$this->debug = $debug;
5762
$this->sessionOptions = $sessionOptions;
5863
}
5964

65+
/**
66+
* @internal
67+
*/
6068
public function onKernelRequest(RequestEvent $event): void
6169
{
6270
if (!$event->isMainRequest()) {
@@ -90,6 +98,9 @@ public function onKernelRequest(RequestEvent $event): void
9098
}
9199
}
92100

101+
/**
102+
* @internal
103+
*/
93104
public function onKernelResponse(ResponseEvent $event): void
94105
{
95106
if (!$event->isMainRequest() || (!$this->container->has('initialized_session') && !$event->getRequest()->hasSession())) {
@@ -218,6 +229,9 @@ public function onKernelResponse(ResponseEvent $event): void
218229
}
219230
}
220231

232+
/**
233+
* @internal
234+
*/
221235
public function onSessionUsage(): void
222236
{
223237
if (!$this->debug) {
@@ -253,6 +267,9 @@ public function onSessionUsage(): void
253267
throw new UnexpectedSessionUsageException('Session was used while the request was declared stateless.');
254268
}
255269

270+
/**
271+
* @internal
272+
*/
256273
public static function getSubscribedEvents(): array
257274
{
258275
return [
@@ -262,6 +279,9 @@ public static function getSubscribedEvents(): array
262279
];
263280
}
264281

282+
/**
283+
* @internal
284+
*/
265285
public function reset(): void
266286
{
267287
if (\PHP_SESSION_ACTIVE === session_status()) {
@@ -278,6 +298,8 @@ public function reset(): void
278298

279299
/**
280300
* Gets the session object.
301+
*
302+
* @internal
281303
*/
282304
abstract protected function getSession(): ?SessionInterface;
283305

Tests/Controller/ArgumentResolverTest.php

Lines changed: 44 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@
2222
use Symfony\Component\HttpKernel\Controller\ArgumentResolver\DefaultValueResolver;
2323
use Symfony\Component\HttpKernel\Controller\ArgumentResolver\RequestAttributeValueResolver;
2424
use Symfony\Component\HttpKernel\Controller\ArgumentValueResolverInterface;
25+
use Symfony\Component\HttpKernel\Controller\ValueResolverInterface;
26+
use Symfony\Component\HttpKernel\ControllerMetadata\ArgumentMetadata;
2527
use Symfony\Component\HttpKernel\ControllerMetadata\ArgumentMetadataFactory;
2628
use Symfony\Component\HttpKernel\Exception\ResolverNotFoundException;
2729
use Symfony\Component\HttpKernel\Tests\Fixtures\Controller\ExtendingRequest;
@@ -298,24 +300,39 @@ public function testTargetedResolver()
298300

299301
public function testTargetedResolverWithDefaultValue()
300302
{
301-
$resolver = self::getResolver([], [RequestAttributeValueResolver::class => new RequestAttributeValueResolver()]);
303+
$resolver = self::getResolver([], [TestEntityValueResolver::class => new TestEntityValueResolver()]);
302304

303305
$request = Request::create('/');
304306
$controller = (new ArgumentResolverTestController())->controllerTargetingResolverWithDefaultValue(...);
305307

306-
$this->assertSame([2], $resolver->getArguments($request, $controller));
308+
/** @var Post[] $arguments */
309+
$arguments = $resolver->getArguments($request, $controller);
310+
311+
$this->assertCount(1, $arguments);
312+
$this->assertSame('Default', $arguments[0]->title);
307313
}
308314

309315
public function testTargetedResolverWithNullableValue()
310316
{
311-
$resolver = self::getResolver([], [RequestAttributeValueResolver::class => new RequestAttributeValueResolver()]);
317+
$resolver = self::getResolver([], [TestEntityValueResolver::class => new TestEntityValueResolver()]);
312318

313319
$request = Request::create('/');
314320
$controller = (new ArgumentResolverTestController())->controllerTargetingResolverWithNullableValue(...);
315321

316322
$this->assertSame([null], $resolver->getArguments($request, $controller));
317323
}
318324

325+
public function testTargetedResolverWithRequestAttributeValue()
326+
{
327+
$resolver = self::getResolver([], [TestEntityValueResolver::class => new TestEntityValueResolver()]);
328+
329+
$request = Request::create('/');
330+
$request->attributes->set('foo', $object = new Post('Random '.time()));
331+
$controller = $this->controllerTargetingResolverWithTestEntity(...);
332+
333+
$this->assertSame([$object], $resolver->getArguments($request, $controller));
334+
}
335+
319336
public function testDisabledResolver()
320337
{
321338
$resolver = self::getResolver(namedResolvers: []);
@@ -396,11 +413,15 @@ public function controllerTargetingResolver(#[ValueResolver(DefaultValueResolver
396413
{
397414
}
398415

399-
public function controllerTargetingResolverWithDefaultValue(#[ValueResolver(RequestAttributeValueResolver::class)] int $foo = 2)
416+
public function controllerTargetingResolverWithDefaultValue(#[ValueResolver(TestEntityValueResolver::class)] Post $foo = new Post('Default'))
417+
{
418+
}
419+
420+
public function controllerTargetingResolverWithNullableValue(#[ValueResolver(TestEntityValueResolver::class)] ?Post $foo)
400421
{
401422
}
402423

403-
public function controllerTargetingResolverWithNullableValue(#[ValueResolver(RequestAttributeValueResolver::class)] ?int $foo)
424+
public function controllerTargetingResolverWithTestEntity(#[ValueResolver(TestEntityValueResolver::class)] Post $foo)
404425
{
405426
}
406427

@@ -425,3 +446,21 @@ public function controllerTargetingUnknownResolver(
425446
function controller_function($foo, $foobar)
426447
{
427448
}
449+
450+
class TestEntityValueResolver implements ValueResolverInterface
451+
{
452+
public function resolve(Request $request, ArgumentMetadata $argument): iterable
453+
{
454+
return Post::class === $argument->getType() && $request->request->has('title')
455+
? [new Post($request->request->get('title'))]
456+
: [];
457+
}
458+
}
459+
460+
class Post
461+
{
462+
public function __construct(
463+
public readonly string $title,
464+
) {
465+
}
466+
}

0 commit comments

Comments
 (0)