diff --git a/src/Symfony/Component/PropertyAccess/PropertyAccessor.php b/src/Symfony/Component/PropertyAccess/PropertyAccessor.php index 252ad6896d..92caf1e826 100644 --- a/src/Symfony/Component/PropertyAccess/PropertyAccessor.php +++ b/src/Symfony/Component/PropertyAccess/PropertyAccessor.php @@ -117,10 +117,15 @@ class PropertyAccessor implements PropertyAccessorInterface $property = $propertyPath->getElement($i); $isIndex = $propertyPath->isIndex($i); - $isArrayAccess = is_array($objectOrArray) || $objectOrArray instanceof \ArrayAccess; // Create missing nested arrays on demand - if ($isIndex && $isArrayAccess && !isset($objectOrArray[$property])) { + if ( + $isIndex && + ( + ($objectOrArray instanceof \ArrayAccess && !isset($objectOrArray[$property])) || + (is_array($objectOrArray) && !array_key_exists($property, $objectOrArray)) + ) + ) { $objectOrArray[$property] = $i + 1 < $propertyPath->getLength() ? array() : null; } diff --git a/src/Symfony/Component/PropertyAccess/Tests/PropertyAccessorTest.php b/src/Symfony/Component/PropertyAccess/Tests/PropertyAccessorTest.php index 572f123bd9..ca49be6012 100644 --- a/src/Symfony/Component/PropertyAccess/Tests/PropertyAccessorTest.php +++ b/src/Symfony/Component/PropertyAccess/Tests/PropertyAccessorTest.php @@ -221,6 +221,12 @@ class PropertyAccessorTest extends \PHPUnit_Framework_TestCase $this->propertyAccessor->getValue('', 'foobar'); } + public function testGetValueWhenArrayValueIsNull() + { + $this->propertyAccessor = new PropertyAccessor(false, true); + $this->assertNull($this->propertyAccessor->getValue(array('index' => array('nullable' => null)), '[index][nullable]')); + } + public function testSetValueUpdatesArrays() { $array = array();