@@ -61,19 +61,39 @@ public function __construct($dependentEntities = null)
61
61
* @param EntityDataObject $entityObject
62
62
* @param array $operationMetadata
63
63
* @param string $operation
64
+ * @param integer $depth
64
65
* @return array
65
66
* @throws \Exception
66
67
*/
67
- public function resolveOperationDataArray ($ entityObject , $ operationMetadata , $ operation )
68
+ public function resolveOperationDataArray ($ entityObject , $ operationMetadata , $ operation, $ depth = 0 )
68
69
{
69
70
$ operationDataArray = [];
70
71
self ::incrementSequence ($ entityObject ->getName ());
71
72
72
73
foreach ($ operationMetadata as $ operationElement ) {
73
74
if ($ operationElement ->getType () == OperationElementExtractor::OPERATION_OBJECT_OBJ_NAME ) {
74
75
$ entityObj = $ this ->resolveOperationObjectAndEntityData ($ entityObject , $ operationElement ->getValue ());
75
- $ operationDataArray [$ operationElement ->getKey ()] =
76
- $ this ->resolveOperationDataArray ($ entityObj , $ operationElement ->getNestedMetadata (), $ operation );
76
+ if (null === $ entityObj && $ operationElement ->getRequired ()) {
77
+ throw new \Exception (sprintf (
78
+ self ::EXCEPTION_REQUIRED_DATA ,
79
+ $ operationElement ->getType (),
80
+ $ operationElement ->getKey (),
81
+ $ entityObject ->getName ()
82
+ ));
83
+ } elseif (null === $ entityObj ) {
84
+ continue ;
85
+ }
86
+ $ operationData = $ this ->resolveOperationDataArray (
87
+ $ entityObj ,
88
+ $ operationElement ->getNestedMetadata (),
89
+ $ operation ,
90
+ $ depth +1
91
+ );
92
+ if ($ depth == 0 ) {
93
+ $ operationDataArray [$ operationElement ->getKey ()] = $ operationData ;
94
+ } else {
95
+ $ operationDataArray = $ operationData ;
96
+ }
77
97
continue ;
78
98
}
79
99
@@ -127,7 +147,8 @@ public function resolveOperationDataArray($entityObject, $operationMetadata, $op
127
147
$ operationDataSubArray = $ this ->resolveNonPrimitiveElement (
128
148
$ entityName ,
129
149
$ operationElement ,
130
- $ operation
150
+ $ operation ,
151
+ $ depth
131
152
);
132
153
133
154
if ($ operationElement ->getType () == OperationDefinitionObjectHandler::ENTITY_OPERATION_ARRAY ) {
@@ -216,8 +237,12 @@ private function resolveOperationObjectAndEntityData($entityObject, $operationEl
216
237
{
217
238
if ($ operationElementValue != $ entityObject ->getType ()) {
218
239
// if we have a mismatch attempt to retrieve linked data and return just the first linkage
219
- $ linkName = $ entityObject ->getLinkedEntitiesOfType ($ operationElementValue )[0 ];
220
- return DataObjectHandler::getInstance ()->getObject ($ linkName );
240
+ $ linkName = $ entityObject ->getLinkedEntitiesOfType ($ operationElementValue );
241
+ if (!empty ($ linkName )) {
242
+ $ linkName = $ linkName [0 ];
243
+ return DataObjectHandler::getInstance ()->getObject ($ linkName );
244
+ }
245
+ return null ;
221
246
}
222
247
223
248
return $ entityObject ;
@@ -229,9 +254,10 @@ private function resolveOperationObjectAndEntityData($entityObject, $operationEl
229
254
* @param string $entityName
230
255
* @param OperationElement $operationElement
231
256
* @param string $operation
257
+ * @param integer $depth
232
258
* @return array
233
259
*/
234
- private function resolveNonPrimitiveElement ($ entityName , $ operationElement , $ operation )
260
+ private function resolveNonPrimitiveElement ($ entityName , $ operationElement , $ operation, $ depth )
235
261
{
236
262
$ linkedEntityObj = $ this ->resolveLinkedEntityObject ($ entityName );
237
263
@@ -242,10 +268,11 @@ private function resolveNonPrimitiveElement($entityName, $operationElement, $ope
242
268
$ operationSubArray = $ this ->resolveOperationDataArray (
243
269
$ linkedEntityObj ,
244
270
[$ operationElement ->getNestedOperationElement ($ operationElement ->getValue ())],
245
- $ operation
271
+ $ operation ,
272
+ $ depth +1
246
273
);
247
274
248
- return $ operationSubArray[ $ operationElement -> getValue ()] ;
275
+ return $ operationSubArray ;
249
276
}
250
277
251
278
$ operationMetadata = OperationDefinitionObjectHandler::getInstance ()->getOperationDefinition (
0 commit comments