|
Apache/2.4.41 (Ubuntu) Linux vmi616275.contaboserver.net 5.4.0-84-generic #94-Ubuntu SMP Thu Aug 26 20:27:37 UTC 2021 x86_64 uid=33(www-data) gid=33(www-data) groups=33(www-data) server ip : 62.171.164.128 | your ip : 127.0.0.1 safemode OFF > / home / dev2.destoffenstraat.com / vendor / magento / framework / Reflection / |
Filename | /home/dev2.destoffenstraat.com/vendor/magento/framework/Reflection/DataObjectProcessor.php |
Size | 4.97 kb |
Permission | rw-r--r-- |
Owner | root : root |
Create time | 17-Aug-2025 10:26 |
Last modified | 07-Jan-2021 21:08 |
Last accessed | 22-Aug-2025 14:41 |
Actions | edit | rename | delete | download (gzip) |
View | text | code | image |
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
namespace Magento\Framework\Reflection;
use Magento\Framework\Api\CustomAttributesDataInterface;
use Magento\Framework\Phrase;
/**
* Data object processor for array serialization using class reflection
*
* @api
* @since 100.0.2
*/
class DataObjectProcessor
{
/**
* @var MethodsMap
*/
private $methodsMapProcessor;
/**
* @var TypeCaster
*/
private $typeCaster;
/**
* @var FieldNamer
*/
private $fieldNamer;
/**
* @var ExtensionAttributesProcessor
*/
private $extensionAttributesProcessor;
/**
* @var CustomAttributesProcessor
*/
private $customAttributesProcessor;
/**
* @var array
*/
private $processors;
/**
* @param MethodsMap $methodsMapProcessor
* @param TypeCaster $typeCaster
* @param FieldNamer $fieldNamer
* @param CustomAttributesProcessor $customAttributesProcessor
* @param ExtensionAttributesProcessor $extensionAttributesProcessor
* @param array $processors
*/
public function __construct(
MethodsMap $methodsMapProcessor,
TypeCaster $typeCaster,
FieldNamer $fieldNamer,
CustomAttributesProcessor $customAttributesProcessor,
ExtensionAttributesProcessor $extensionAttributesProcessor,
array $processors = []
) {
$this->methodsMapProcessor = $methodsMapProcessor;
$this->typeCaster = $typeCaster;
$this->fieldNamer = $fieldNamer;
$this->extensionAttributesProcessor = $extensionAttributesProcessor;
$this->customAttributesProcessor = $customAttributesProcessor;
$this->processors = $processors;
}
/**
* Use class reflection on given data interface to build output data array
*
* @param mixed $dataObject
* @param string $dataObjectType
* @return array
* @SuppressWarnings(PHPMD.CyclomaticComplexity)
*/
public function buildOutputDataArray($dataObject, $dataObjectType)
{
$methods = $this->methodsMapProcessor->getMethodsMap($dataObjectType);
$outputData = [];
foreach (array_keys($methods) as $methodName) {
if (!$this->methodsMapProcessor->isMethodValidForDataField($dataObjectType, $methodName)) {
continue;
}
$value = $dataObject->{$methodName}();
$isMethodReturnValueRequired = $this->methodsMapProcessor->isMethodReturnValueRequired(
$dataObjectType,
$methodName
);
if ($value === null && !$isMethodReturnValueRequired) {
continue;
}
$returnType = $this->methodsMapProcessor->getMethodReturnType($dataObjectType, $methodName);
$key = $this->fieldNamer->getFieldNameForMethodName($methodName);
if ($key === CustomAttributesDataInterface::CUSTOM_ATTRIBUTES && $value === []) {
continue;
}
if ($key === CustomAttributesDataInterface::CUSTOM_ATTRIBUTES) {
$value = $this->customAttributesProcessor->buildOutputDataArray($dataObject, $dataObjectType);
} elseif ($key === "extension_attributes") {
$value = $this->extensionAttributesProcessor->buildOutputDataArray($value, $returnType);
if (empty($value)) {
continue;
}
} else {
if (is_object($value) && !($value instanceof Phrase)) {
$value = $this->buildOutputDataArray($value, $returnType);
} elseif (is_array($value)) {
$valueResult = [];
$arrayElementType = substr($returnType, 0, -2);
foreach ($value as $singleValue) {
if (is_object($singleValue) && !($singleValue instanceof Phrase)) {
$singleValue = $this->buildOutputDataArray($singleValue, $arrayElementType);
}
$valueResult[] = $this->typeCaster->castValueToType($singleValue, $arrayElementType);
}
$value = $valueResult;
} else {
$value = $this->typeCaster->castValueToType($value, $returnType);
}
}
$outputData[$key] = $value;
}
$outputData = $this->changeOutputArray($dataObject, $outputData);
return $outputData;
}
/**
* Change output array if needed.
*
* @param mixed $dataObject
* @param array $outputData
* @return array
*/
private function changeOutputArray($dataObject, array $outputData): array
{
foreach ($this->processors as $dataObjectClassName => $processor) {
if ($dataObject instanceof $dataObjectClassName) {
$outputData = $processor->execute($dataObject, $outputData);
}
}
return $outputData;
}
}
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
namespace Magento\Framework\Reflection;
use Magento\Framework\Api\CustomAttributesDataInterface;
use Magento\Framework\Phrase;
/**
* Data object processor for array serialization using class reflection
*
* @api
* @since 100.0.2
*/
class DataObjectProcessor
{
/**
* @var MethodsMap
*/
private $methodsMapProcessor;
/**
* @var TypeCaster
*/
private $typeCaster;
/**
* @var FieldNamer
*/
private $fieldNamer;
/**
* @var ExtensionAttributesProcessor
*/
private $extensionAttributesProcessor;
/**
* @var CustomAttributesProcessor
*/
private $customAttributesProcessor;
/**
* @var array
*/
private $processors;
/**
* @param MethodsMap $methodsMapProcessor
* @param TypeCaster $typeCaster
* @param FieldNamer $fieldNamer
* @param CustomAttributesProcessor $customAttributesProcessor
* @param ExtensionAttributesProcessor $extensionAttributesProcessor
* @param array $processors
*/
public function __construct(
MethodsMap $methodsMapProcessor,
TypeCaster $typeCaster,
FieldNamer $fieldNamer,
CustomAttributesProcessor $customAttributesProcessor,
ExtensionAttributesProcessor $extensionAttributesProcessor,
array $processors = []
) {
$this->methodsMapProcessor = $methodsMapProcessor;
$this->typeCaster = $typeCaster;
$this->fieldNamer = $fieldNamer;
$this->extensionAttributesProcessor = $extensionAttributesProcessor;
$this->customAttributesProcessor = $customAttributesProcessor;
$this->processors = $processors;
}
/**
* Use class reflection on given data interface to build output data array
*
* @param mixed $dataObject
* @param string $dataObjectType
* @return array
* @SuppressWarnings(PHPMD.CyclomaticComplexity)
*/
public function buildOutputDataArray($dataObject, $dataObjectType)
{
$methods = $this->methodsMapProcessor->getMethodsMap($dataObjectType);
$outputData = [];
foreach (array_keys($methods) as $methodName) {
if (!$this->methodsMapProcessor->isMethodValidForDataField($dataObjectType, $methodName)) {
continue;
}
$value = $dataObject->{$methodName}();
$isMethodReturnValueRequired = $this->methodsMapProcessor->isMethodReturnValueRequired(
$dataObjectType,
$methodName
);
if ($value === null && !$isMethodReturnValueRequired) {
continue;
}
$returnType = $this->methodsMapProcessor->getMethodReturnType($dataObjectType, $methodName);
$key = $this->fieldNamer->getFieldNameForMethodName($methodName);
if ($key === CustomAttributesDataInterface::CUSTOM_ATTRIBUTES && $value === []) {
continue;
}
if ($key === CustomAttributesDataInterface::CUSTOM_ATTRIBUTES) {
$value = $this->customAttributesProcessor->buildOutputDataArray($dataObject, $dataObjectType);
} elseif ($key === "extension_attributes") {
$value = $this->extensionAttributesProcessor->buildOutputDataArray($value, $returnType);
if (empty($value)) {
continue;
}
} else {
if (is_object($value) && !($value instanceof Phrase)) {
$value = $this->buildOutputDataArray($value, $returnType);
} elseif (is_array($value)) {
$valueResult = [];
$arrayElementType = substr($returnType, 0, -2);
foreach ($value as $singleValue) {
if (is_object($singleValue) && !($singleValue instanceof Phrase)) {
$singleValue = $this->buildOutputDataArray($singleValue, $arrayElementType);
}
$valueResult[] = $this->typeCaster->castValueToType($singleValue, $arrayElementType);
}
$value = $valueResult;
} else {
$value = $this->typeCaster->castValueToType($value, $returnType);
}
}
$outputData[$key] = $value;
}
$outputData = $this->changeOutputArray($dataObject, $outputData);
return $outputData;
}
/**
* Change output array if needed.
*
* @param mixed $dataObject
* @param array $outputData
* @return array
*/
private function changeOutputArray($dataObject, array $outputData): array
{
foreach ($this->processors as $dataObjectClassName => $processor) {
if ($dataObject instanceof $dataObjectClassName) {
$outputData = $processor->execute($dataObject, $outputData);
}
}
return $outputData;
}
}