diff --git a/src/Hydrator/NamingStrategy/UnderscoreNamingStrategy.php b/src/Hydrator/NamingStrategy/UnderscoreNamingStrategy.php index c6eceb531..52dc27677 100644 --- a/src/Hydrator/NamingStrategy/UnderscoreNamingStrategy.php +++ b/src/Hydrator/NamingStrategy/UnderscoreNamingStrategy.php @@ -13,9 +13,15 @@ class UnderscoreNamingStrategy implements NamingStrategyInterface { + /** + * @var FilterChain|null + */ protected static $camelCaseToUnderscoreFilter; - protected static $underscoreToCamelCaseFilter; + /** + * @var FilterChain|null + */ + protected static $underscoreToStudlyCaseFilter; /** * Remove underscores and capitalize letters @@ -25,7 +31,7 @@ class UnderscoreNamingStrategy implements NamingStrategyInterface */ public function hydrate($name) { - return lcfirst($this->getUnderscoreToCamelCaseFilter()->filter($name)); + return $this->getUnderscoreToStudlyCaseFilter()->filter($name); } /** @@ -42,16 +48,17 @@ public function extract($name) /** * @return FilterChain */ - protected function getUnderscoreToCamelCaseFilter() + protected function getUnderscoreToStudlyCaseFilter() { - if (static::$underscoreToCamelCaseFilter instanceof FilterChain) { - return static::$underscoreToCamelCaseFilter; + if (static::$underscoreToStudlyCaseFilter instanceof FilterChain) { + return static::$underscoreToStudlyCaseFilter; } $filter = new FilterChain(); - $filter->attachByName('WordUnderscoreToCamelCase'); - static::$underscoreToCamelCaseFilter = $filter; - return $filter; + + $filter->attachByName('WordUnderscoreToStudlyCase'); + + return static::$underscoreToStudlyCaseFilter = $filter; } /** @@ -64,9 +71,10 @@ protected function getCamelCaseToUnderscoreFilter() } $filter = new FilterChain(); + $filter->attachByName('WordCamelCaseToUnderscore'); $filter->attachByName('StringToLower'); - static::$camelCaseToUnderscoreFilter = $filter; - return $filter; + + return static::$camelCaseToUnderscoreFilter = $filter; } } diff --git a/test/Hydrator/NamingStrategy/UnderscoreNamingStrategyTest.php b/test/Hydrator/NamingStrategy/UnderscoreNamingStrategyTest.php index 2162ef5bd..ad3a790d0 100644 --- a/test/Hydrator/NamingStrategy/UnderscoreNamingStrategyTest.php +++ b/test/Hydrator/NamingStrategy/UnderscoreNamingStrategyTest.php @@ -29,4 +29,15 @@ public function testNameExtractsToUnderscore() $strategy = new UnderscoreNamingStrategy(); $this->assertEquals('foo_bar_baz', $strategy->extract('fooBarBaz')); } + + /** + * @group 6422 + * @group 6420 + */ + public function testNameHydratesToStudlyCaps() + { + $strategy = new UnderscoreNamingStrategy(); + + $this->assertEquals('fooBarBaz', $strategy->hydrate('Foo_Bar_Baz')); + } }