diff --git a/src/Symfony/Component/Serializer/CHANGELOG.md b/src/Symfony/Component/Serializer/CHANGELOG.md index 66081baa0585..d5502b062f47 100644 --- a/src/Symfony/Component/Serializer/CHANGELOG.md +++ b/src/Symfony/Component/Serializer/CHANGELOG.md @@ -1,6 +1,11 @@ CHANGELOG ========= +2.5.0 +----- + + * added support for `is.*` getters in `GetSetMethodNormalizer` + 2.4.0 ----- diff --git a/src/Symfony/Component/Serializer/Normalizer/GetSetMethodNormalizer.php b/src/Symfony/Component/Serializer/Normalizer/GetSetMethodNormalizer.php index 1b1a5f568874..f24442680baf 100644 --- a/src/Symfony/Component/Serializer/Normalizer/GetSetMethodNormalizer.php +++ b/src/Symfony/Component/Serializer/Normalizer/GetSetMethodNormalizer.php @@ -88,7 +88,7 @@ public function normalize($object, $format = null, array $context = array()) $attributes = array(); foreach ($reflectionMethods as $method) { if ($this->isGetMethod($method)) { - $attributeName = lcfirst(substr($method->name, 3)); + $attributeName = lcfirst(substr($method->name, 0 === strpos($method->name, 'is') ? 2 : 3)); if (in_array($attributeName, $this->ignoredAttributes)) { continue; @@ -211,17 +211,19 @@ private function supports($class) } /** - * Checks if a method's name is get.* and can be called without parameters. + * Checks if a method's name is get.* or is.*, and can be called without parameters. * * @param \ReflectionMethod $method the method to check * - * @return Boolean whether the method is a getter. + * @return Boolean whether the method is a getter or boolean getter. */ private function isGetMethod(\ReflectionMethod $method) { + $methodLength = strlen($method->name); + return ( - 0 === strpos($method->name, 'get') && - 3 < strlen($method->name) && + ((0 === strpos($method->name, 'get') && 3 < $methodLength) || + (0 === strpos($method->name, 'is') && 2 < $methodLength)) && 0 === $method->getNumberOfRequiredParameters() ); } diff --git a/src/Symfony/Component/Serializer/Tests/Normalizer/GetSetMethodNormalizerTest.php b/src/Symfony/Component/Serializer/Tests/Normalizer/GetSetMethodNormalizerTest.php index f3bf9694d206..0e6934359e19 100644 --- a/src/Symfony/Component/Serializer/Tests/Normalizer/GetSetMethodNormalizerTest.php +++ b/src/Symfony/Component/Serializer/Tests/Normalizer/GetSetMethodNormalizerTest.php @@ -26,9 +26,10 @@ public function testNormalize() $obj = new GetSetDummy(); $obj->setFoo('foo'); $obj->setBar('bar'); + $obj->setBaz(true); $obj->setCamelCase('camelcase'); $this->assertEquals( - array('foo' => 'foo', 'bar' => 'bar', 'fooBar' => 'foobar', 'camelCase' => 'camelcase'), + array('foo' => 'foo', 'bar' => 'bar', 'baz' => true, 'fooBar' => 'foobar', 'camelCase' => 'camelcase'), $this->normalizer->normalize($obj, 'any') ); } @@ -36,12 +37,13 @@ public function testNormalize() public function testDenormalize() { $obj = $this->normalizer->denormalize( - array('foo' => 'foo', 'bar' => 'bar', 'fooBar' => 'foobar'), + array('foo' => 'foo', 'bar' => 'bar', 'baz' => true, 'fooBar' => 'foobar'), __NAMESPACE__.'\GetSetDummy', 'any' ); $this->assertEquals('foo', $obj->getFoo()); $this->assertEquals('bar', $obj->getBar()); + $this->assertTrue($obj->isBaz()); } public function testDenormalizeOnCamelCaseFormat() @@ -80,10 +82,11 @@ public function attributeProvider() public function testConstructorDenormalize() { $obj = $this->normalizer->denormalize( - array('foo' => 'foo', 'bar' => 'bar', 'fooBar' => 'foobar'), + array('foo' => 'foo', 'bar' => 'bar', 'baz' => true, 'fooBar' => 'foobar'), __NAMESPACE__.'\GetConstructorDummy', 'any'); $this->assertEquals('foo', $obj->getFoo()); $this->assertEquals('bar', $obj->getBar()); + $this->assertTrue($obj->isBaz()); } /** @@ -93,7 +96,7 @@ public function testCallbacks($callbacks, $value, $result, $message) { $this->normalizer->setCallbacks($callbacks); - $obj = new GetConstructorDummy('', $value); + $obj = new GetConstructorDummy('', $value, true); $this->assertEquals( $result, @@ -109,18 +112,19 @@ public function testUncallableCallbacks() { $this->normalizer->setCallbacks(array('bar' => null)); - $obj = new GetConstructorDummy('baz', 'quux'); + $obj = new GetConstructorDummy('baz', 'quux', true); $this->normalizer->normalize($obj, 'any'); } public function testIgnoredAttributes() { - $this->normalizer->setIgnoredAttributes(array('foo', 'bar', 'camelCase')); + $this->normalizer->setIgnoredAttributes(array('foo', 'bar', 'baz', 'camelCase')); $obj = new GetSetDummy(); $obj->setFoo('foo'); $obj->setBar('bar'); + $obj->setBaz(true); $this->assertEquals( array('fooBar' => 'foobar'), @@ -138,7 +142,7 @@ public function provideCallbacks() }, ), 'baz', - array('foo' => '', 'bar' => 'baz'), + array('foo' => '', 'bar' => 'baz', 'baz' => true), 'Change a string', ), array( @@ -148,7 +152,7 @@ public function provideCallbacks() }, ), 'baz', - array('foo' => '', 'bar' => null), + array('foo' => '', 'bar' => null, 'baz' => true), 'Null an item' ), array( @@ -158,7 +162,7 @@ public function provideCallbacks() }, ), new \DateTime('2011-09-10 06:30:00'), - array('foo' => '', 'bar' => '10-09-2011 06:30:00'), + array('foo' => '', 'bar' => '10-09-2011 06:30:00', 'baz' => true), 'Format a date', ), array( @@ -172,8 +176,8 @@ public function provideCallbacks() return $foos; }, ), - array(new GetConstructorDummy('baz', ''), new GetConstructorDummy('quux', '')), - array('foo' => '', 'bar' => 'bazquux'), + array(new GetConstructorDummy('baz', '', false), new GetConstructorDummy('quux', '', false)), + array('foo' => '', 'bar' => 'bazquux', 'baz' => true), 'Collect a property', ), array( @@ -182,8 +186,8 @@ public function provideCallbacks() return count($bars); }, ), - array(new GetConstructorDummy('baz', ''), new GetConstructorDummy('quux', '')), - array('foo' => '', 'bar' => 2), + array(new GetConstructorDummy('baz', '', false), new GetConstructorDummy('quux', '', false)), + array('foo' => '', 'bar' => 2, 'baz' => true), 'Count a property', ), ); @@ -194,6 +198,7 @@ class GetSetDummy { protected $foo; private $bar; + private $baz; protected $camelCase; public function getFoo() @@ -216,6 +221,16 @@ public function setBar($bar) $this->bar = $bar; } + public function isBaz() + { + return $this->baz; + } + + public function setBaz($baz) + { + $this->baz = $baz; + } + public function getFooBar() { return $this->foo.$this->bar; @@ -241,11 +256,13 @@ class GetConstructorDummy { protected $foo; private $bar; + private $baz; - public function __construct($foo, $bar) + public function __construct($foo, $bar, $baz) { $this->foo = $foo; $this->bar = $bar; + $this->baz = $baz; } public function getFoo() @@ -258,6 +275,11 @@ public function getBar() return $this->bar; } + public function isBaz() + { + return $this->baz; + } + public function otherMethod() { throw new \RuntimeException("Dummy::otherMethod() should not be called"); pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy