diff --git a/Admin/FieldDescription.php b/Admin/FieldDescription.php index d1bcea44c..6047123a0 100644 --- a/Admin/FieldDescription.php +++ b/Admin/FieldDescription.php @@ -98,6 +98,10 @@ public function getValue($object) $object = $this->getFieldValue($object, $parentAssociationMapping['fieldName']); } + if (isset($this->getFieldMapping()['declaredField'])) { + $object = $this->getFieldValue($object, $this->getFieldMapping()['declaredField']); + } + return $this->getFieldValue($object, $this->fieldName); } } diff --git a/Tests/Admin/FieldDescriptionTest.php b/Tests/Admin/FieldDescriptionTest.php index eb6bf3e94..7ef105010 100644 --- a/Tests/Admin/FieldDescriptionTest.php +++ b/Tests/Admin/FieldDescriptionTest.php @@ -330,4 +330,26 @@ public function testGetFieldMapping() $this->assertEquals($fieldMapping, $field->getFieldMapping()); } + + public function testGetValueForEmbeddedObject() + { + $mockedEmbeddedObject = $this->getMock('MockedTestObject', array('myMethod')); + $mockedEmbeddedObject->expects($this->once()) + ->method('myMethod') + ->will($this->returnValue('myMethodValue')); + + $mockedObject = $this->getMock('MockedTestObject', array('getMyEmbeddedObject')); + $mockedObject->expects($this->once()) + ->method('getMyEmbeddedObject') + ->will($this->returnValue($mockedEmbeddedObject)); + + $field = new FieldDescription(); + $field->setFieldMapping(array( + 'declaredField' => 'myEmbeddedObject', 'type' => 'string', 'fieldName' => 'myEmbeddedObject.myMethod' + )); + $field->setFieldName('myMethod'); + $field->setOption('code', 'myMethod'); + + $this->assertEquals('myMethodValue', $field->getValue($mockedObject)); + } }