Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitad8e5a0

Browse files
committed
[JsonEncoder] AddEncodable attribute
1 parent4dcb217 commitad8e5a0

File tree

6 files changed

+66
-4
lines changed

6 files changed

+66
-4
lines changed

‎src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,7 @@
9999
useSymfony\Component\HttpKernel\DataCollector\DataCollectorInterface;
100100
useSymfony\Component\HttpKernel\DependencyInjection\Extension;
101101
useSymfony\Component\HttpKernel\Log\DebugLoggerConfigurator;
102+
useSymfony\Component\JsonEncoder\Attribute\Encodable;
102103
useSymfony\Component\JsonEncoder\Decode\Denormalizer\DenormalizerInterfaceasJsonEncoderDenormalizerInterface;
103104
useSymfony\Component\JsonEncoder\DecoderInterfaceasJsonEncoderDecoderInterface;
104105
useSymfony\Component\JsonEncoder\Encode\Normalizer\NormalizerInterfaceasJsonEncoderNormalizerInterface;
@@ -741,6 +742,10 @@ static function (ChildDefinition $definition, AsPeriodicTask|AsCronTask $attribu
741742
}
742743
);
743744
}
745+
$container->registerAttributeForAutoconfiguration(Encodable::class,staticfunction (ChildDefinition$definition):void {
746+
$definition->addTag('json_encoder.encodable');
747+
$definition->addTag('container.excluded');
748+
});
744749

745750
if (!$container->getParameter('kernel.debug')) {
746751
// remove tagged iterator argument for resource checkers

‎src/Symfony/Bundle/FrameworkBundle/Tests/Functional/JsonEncoderTest.php

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
namespaceSymfony\Bundle\FrameworkBundle\Tests\Functional;
1313

1414
useSymfony\Bundle\FrameworkBundle\Tests\Functional\app\JsonEncoder\Dto\Dummy;
15+
useSymfony\Component\Filesystem\Filesystem;
1516
useSymfony\Component\JsonEncoder\DecoderInterface;
1617
useSymfony\Component\JsonEncoder\EncoderInterface;
1718
useSymfony\Component\TypeInfo\Type;
@@ -21,10 +22,15 @@
2122
*/
2223
class JsonEncoderTestextends AbstractWebTestCase
2324
{
24-
publicfunctiontestEncode()
25+
protectedfunctionsetUp():void
2526
{
27+
parent::setUp();
28+
2629
static::bootKernel(['test_case' =>'JsonEncoder']);
30+
}
2731

32+
publicfunctiontestEncode()
33+
{
2834
/** @var EncoderInterface $encoder */
2935
$encoder =static::getContainer()->get('json_encoder.encoder.alias');
3036

@@ -33,8 +39,6 @@ public function testEncode()
3339

3440
publicfunctiontestDecode()
3541
{
36-
static::bootKernel(['test_case' =>'JsonEncoder']);
37-
3842
/** @var DecoderInterface $decoder */
3943
$decoder =static::getContainer()->get('json_encoder.decoder.alias');
4044

@@ -44,4 +48,22 @@ public function testDecode()
4448

4549
$this->assertEquals($expected,$decoder->decode('{"@name": "DUMMY", "range": "0..1"}', Type::object(Dummy::class)));
4650
}
51+
52+
publicfunctiontestWarmupEncodableClasses()
53+
{
54+
/** @var Filesystem $fs */
55+
$fs =static::getContainer()->get('filesystem');
56+
57+
$encodersDir =\sprintf('%s/json_encoder/encoder/',static::getContainer()->getParameter('kernel.cache_dir'));
58+
59+
// clear already created encoders
60+
if ($fs->exists($encodersDir)) {
61+
$fs->remove($encodersDir);
62+
}
63+
64+
static::getContainer()->get('json_encoder.cache_warmer.encoder_decoder.alias')->warmUp(static::getContainer()->getParameter('kernel.cache_dir'));
65+
66+
$this->assertFileExists($encodersDir);
67+
$this->assertCount(1,glob($encodersDir.'/*'));
68+
}
4769
}

‎src/Symfony/Bundle/FrameworkBundle/Tests/Functional/app/JsonEncoder/Dto/Dummy.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,14 @@
1313

1414
useSymfony\Bundle\FrameworkBundle\Tests\Functional\app\JsonEncoder\RangeNormalizer;
1515
useSymfony\Component\JsonEncoder\Attribute\Denormalizer;
16+
useSymfony\Component\JsonEncoder\Attribute\Encodable;
1617
useSymfony\Component\JsonEncoder\Attribute\EncodedName;
1718
useSymfony\Component\JsonEncoder\Attribute\Normalizer;
1819

1920
/**
2021
* @author Mathias Arlaud <mathias.arlaud@gmail.com>
2122
*/
23+
#[Encodable]
2224
class Dummy
2325
{
2426
#[EncodedName('@name')]

‎src/Symfony/Bundle/FrameworkBundle/Tests/Functional/app/JsonEncoder/config.yml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,4 +18,9 @@ services:
1818
alias:json_encoder.decoder
1919
public:true
2020

21+
json_encoder.cache_warmer.encoder_decoder.alias:
22+
alias:.json_encoder.cache_warmer.encoder_decoder
23+
public:true
24+
25+
Symfony\Bundle\FrameworkBundle\Tests\Functional\app\JsonEncoder\Dto\Dummy:~
2126
Symfony\Bundle\FrameworkBundle\Tests\Functional\app\JsonEncoder\RangeNormalizer:~
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
<?php
2+
3+
/*
4+
* This file is part of the Symfony package.
5+
*
6+
* (c) Fabien Potencier <fabien@symfony.com>
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+
namespaceSymfony\Component\JsonEncoder\Attribute;
13+
14+
/**
15+
* Mark a class as encodable.
16+
*
17+
* @author Mathias Arlaud <mathias.arlaud@gmail.com>
18+
*
19+
* @experimental
20+
*/
21+
#[\Attribute(\Attribute::TARGET_CLASS)]
22+
finalclass Encodable
23+
{
24+
}

‎src/Symfony/Component/JsonEncoder/DependencyInjection/EncodablePass.php

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,11 @@ public function process(ContainerBuilder $container): void
3030
$encodableClassNames = [];
3131

3232
// retrieve concrete services tagged with "json_encoder.encodable" tag
33-
foreach ($container->findTaggedServiceIds('json_encoder.encodable')as$id =>$tags) {
33+
foreach ($container->getDefinitions()as$id =>$definition) {
34+
if (!$definition->hasTag('json_encoder.encodable')) {
35+
continue;
36+
}
37+
3438
if (($className =$container->getDefinition($id)->getClass()) && !$container->getDefinition($id)->isAbstract()) {
3539
$encodableClassNames[] =$className;
3640
}

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp