/** * {@inheritDoc} */ protected function extractByReference($object) { $fieldNames = array_merge($this->metadata->getFieldNames(), $this->metadata->getAssociationNames()); $refl = $this->metadata->getReflectionClass(); $filter = $object instanceof FilterProviderInterface ? $object->getFilter() : $this->filterComposite; $data = parent::extractByReference($object); foreach ($fieldNames as $fieldName) { if ($filter && !$filter->filter($fieldName) || false === strpos($fieldName, '.')) { continue; } list($fieldName) = explode('.', $fieldName, 2); $reflProperty = $refl->getProperty($fieldName); $reflProperty->setAccessible(true); $dataFieldName = $this->computeExtractFieldName($fieldName); $data[$dataFieldName] = $this->extractValue($fieldName, $reflProperty->getValue($object), $object); } return $data; }