コード例 #1
0
 /**
  * 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 = [];
     /** @var MethodReflection $method */
     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);
         } 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;
     }
     return $outputData;
 }
コード例 #2
0
 /**
  * Writes out the extension attributes in an array.
  *
  * @param ExtensionAttributeInterface $dataObject
  * @param string $dataObjectType
  * @return array
  * @SuppressWarnings(PHPMD.CyclomaticComplexity)
  */
 public function buildOutputDataArray(ExtensionAttributesInterface $dataObject, $dataObjectType)
 {
     $methods = $this->methodsMapProcessor->getMethodsMap($dataObjectType);
     $outputData = [];
     /** @var MethodReflection $method */
     foreach (array_keys($methods) as $methodName) {
         if (!$this->methodsMapProcessor->isMethodValidForDataField($dataObjectType, $methodName)) {
             continue;
         }
         $key = $this->fieldNamer->getFieldNameForMethodName($methodName);
         if ($this->isPermissionChecked && !$this->isAttributePermissionValid($dataObjectType, $key)) {
             continue;
         }
         $value = $dataObject->{$methodName}();
         if ($value === null) {
             // all extension attributes are optional so don't need to check if isRequired
             continue;
         }
         $returnType = $this->methodsMapProcessor->getMethodReturnType($dataObjectType, $methodName);
         if (is_object($value) && !$value instanceof Phrase) {
             $value = $this->dataObjectProcessor->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->dataObjectProcessor->buildOutputDataArray($singleValue, $arrayElementType);
                 }
                 $valueResult[] = $this->typeCaster->castValueToType($singleValue, $arrayElementType);
             }
             $value = $valueResult;
         } else {
             $value = $this->typeCaster->castValueToType($value, $returnType);
         }
         $outputData[$key] = $value;
     }
     return $outputData;
 }
コード例 #3
0
 /**
  * @param mixed $origValue
  * @param string $typeToCast
  * @param mixed $expectedValue
  * @dataProvider typeCastValueProvider
  */
 public function testCastValues($origValue, $typeToCast, $expectedValue)
 {
     $value = $this->model->castValueToType($origValue, $typeToCast);
     $this->assertTrue($value === $expectedValue);
 }