public function adaptBeforeExecuting($definition, $rmi, $arguments) { if ($definition['provider'] !== 'Data') { return $arguments; } if ($definition['name'] == 'beforeFindById' || $definition['name'] == 'afterFindById') { if (isset($arguments[2])) { $objects = $arguments[2]; if ($objects != null && count($objects) == 0) { $arguments[2] = ''; } } } else { if ($definition['name'] == 'beforeLoadRelations' || $definition['name'] == 'afterLoadRelations') { if (isset($arguments[3])) { $objects = $arguments[3]; if ($objects != null && count($objects) == 0) { $arguments[3] = ''; } } } } // convert data to ExecutionResult class foreach ($arguments as $arg_index => $arg_val) { if (isset($arg_val["___jsonclass"])) { if ($arg_val["___jsonclass"] == "com.backendless.servercode.ExecutionResult") { $execution_result = new ExecutionResult(); $execution_result->setException($arguments[$arg_index]["exception"]); $execution_result->setResult($arguments[$arg_index]["result"]); $arguments[$arg_index] = $execution_result; } } } $generic_index = $definition['generic_index']; // int 1 if ($generic_index == null) { return $arguments; } $arguments[0] = new RunnerContext($arguments[0]); $declared_properties = $arguments[$generic_index]; if ($rmi->getTarget() === self::$ALL_CONTEXT) { $arguments[$generic_index] = $declared_properties; return $arguments; } // model creation and fill data to properties $arguments[1] = ClassManager::getClassInstanceByName($declared_properties['___class']); ReflectionUtil::fillClassProperties($arguments[1], $declared_properties); //check extra data in declared_properties $model_prop = (new ReflectionClass(ClassManager::getFullClassName($declared_properties['___class'])))->getProperties(); $missing_properties = $declared_properties; foreach ($model_prop as $property) { $property->setAccessible(true); if (array_key_exists($property->name, $declared_properties)) { unset($missing_properties[$property->name]); } } $arguments[0]->setMissingProperties($missing_properties); return $arguments; }