File tree Expand file tree Collapse file tree 4 files changed +134
-0
lines changed
Bundle/FrameworkBundle/Resources/config Expand file tree Collapse file tree 4 files changed +134
-0
lines changed Original file line number Diff line number Diff line change 26
26
<tag name =" serializer.normalizer" priority =" -1000" />
27
27
</service >
28
28
29
+ <!-- Json Normalizer -->
30
+ <service id =" serializer.normalizer.json" class =" Symfony\Component\Serializer\Normalizer\JsonSerializableNormalizer" public =" false" >
31
+ <!-- Run after all custom serializers, but before the ObjectNormalizer -->
32
+ <tag name =" serializer.normalizer" priority =" -900" />
33
+ </service >
34
+
29
35
<!-- Loader -->
30
36
<service id =" serializer.mapping.chain_loader" class =" Symfony\Component\Serializer\Mapping\Loader\LoaderChain" public =" false" >
31
37
<argument type =" collection" />
Original file line number Diff line number Diff line change
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
+ namespace Symfony \Component \Serializer \Normalizer ;
13
+
14
+ use Symfony \Component \Serializer \Exception \InvalidArgumentException ;
15
+
16
+ /**
17
+ * A normalizer that uses an objects own JsonSerializable implementation.
18
+ *
19
+ * @author Fred Cox <mcfedr@gmail.com>
20
+ */
21
+ class JsonSerializableNormalizer implements NormalizerInterface
22
+ {
23
+ /**
24
+ * {@inheritdoc}
25
+ */
26
+ public function normalize ($ object , $ format = null , array $ context = [])
27
+ {
28
+ if (!$ object instanceof \JsonSerializable) {
29
+ throw new InvalidArgumentException ('The object must implement "\JsonSerializable". ' );
30
+ }
31
+
32
+ return $ object ->jsonSerialize ();
33
+ }
34
+
35
+ /**
36
+ * {@inheritdoc}
37
+ */
38
+ public function supportsNormalization ($ data , $ format = null )
39
+ {
40
+ return $ data instanceof \JsonSerializable;
41
+ }
42
+ }
Original file line number Diff line number Diff line change
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
+ namespace Symfony \Component \Serializer \Tests \Fixtures ;
13
+
14
+ class JsonSerializableDummy implements \JsonSerializable
15
+ {
16
+ public $ foo = 'a ' ;
17
+ public $ bar = 'b ' ;
18
+ public $ baz = 'c ' ;
19
+ public $ qux = 'd ' ;
20
+
21
+ public function jsonSerialize ()
22
+ {
23
+ return [
24
+ 'foo ' => $ this ->foo ,
25
+ 'bar ' => $ this ->bar ,
26
+ 'baz ' => $ this ->baz ,
27
+ 'qux ' => $ this ->qux ,
28
+ ];
29
+ }
30
+ }
Original file line number Diff line number Diff line change
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
+ namespace Symfony \Component \Serializer \Tests \Normalizer ;
13
+
14
+ use Symfony \Component \Serializer \Normalizer \JsonSerializableNormalizer ;
15
+ use Symfony \Component \Serializer \Tests \Fixtures \JsonSerializableDummy ;
16
+
17
+ /**
18
+ * @author Fred Cox <mcfedr@gmail.com>
19
+ */
20
+ class JsonSerializableNormalizerTest extends \PHPUnit_Framework_TestCase
21
+ {
22
+ /**
23
+ * @var JsonSerializableNormalizer
24
+ */
25
+ private $ normalizer ;
26
+
27
+ protected function setUp ()
28
+ {
29
+ $ this ->normalizer = new JsonSerializableNormalizer ();
30
+ }
31
+
32
+ public function testSupportNormalization ()
33
+ {
34
+ $ this ->assertTrue ($ this ->normalizer ->supportsNormalization (new JsonSerializableDummy ()));
35
+ $ this ->assertFalse ($ this ->normalizer ->supportsNormalization (new \stdClass ()));
36
+ }
37
+
38
+ public function testNormalize ()
39
+ {
40
+ $ this ->assertEquals ([
41
+ 'foo ' => 'a ' ,
42
+ 'bar ' => 'b ' ,
43
+ 'baz ' => 'c ' ,
44
+ 'qux
76A7
' => 'd ' ,
45
+ ], $ this ->normalizer ->normalize (new JsonSerializableDummy ()));
46
+ }
47
+
48
+ /**
49
+ * @expectedException \Symfony\Component\Serializer\Exception\InvalidArgumentException
50
+ * @expectedExceptionMessage The object must implement "\JsonSerializable".
51
+ */
52
+ public function testInvalidDataThrowException ()
53
+ {
54
+ $ this ->normalizer ->normalize (new \stdClass ());
55
+ }
56
+ }
You can’t perform that action at this time.
0 commit comments