/** * Transform an array to a class element object * * @param array $definition Class definitoion * * @return Deflection\Element\Classes */ public function arrayToClassElement($definition) { $class = new Classes(); if (isset($definition['docblock'])) { $docblock = $this->arrayToDocblockElement($definition['docblock']); $class->setDocbloc($docblock); } if (isset($definition['namespace'])) { $class->setNamespace($definition['namespace']); } if (isset($definition['name'])) { $class->setName($definition['name']); } if (isset($definition['extends'])) { $class->setExtends($definition['extends']); } if (isset($definition['implements'])) { foreach ($definition['implements'] as $interface) { $class->addImplements($interface); } } if (isset($definition['uses'])) { foreach ($definition['uses'] as $alias => $use) { $alias = is_string($alias) ? $alias : null; $class->addUse($use, $alias); } } if (isset($definition['functions'])) { foreach ($definition['functions'] as $definition) { $function = $this->arrayToFunctionElement($definition); $class->addFunction($function); } } return $class; }
protected function addServicesFromDefinition(Classes $class, $definition, $isChild = null) { foreach ($definition as $method => $infos) { $docblock = new Docblock(); $docblock->setDescription('Method ' . $method); $return = $this->getElement(array_pop($infos['outputs'])); $docblock->addParam('return', $this->getType($return->getName(), $return->getNamespace())); $methodName = ($isChild === false ? '_' : '') . lcfirst($method); $function = new Functions(); $function->setDocblock($docblock); $function->isPublic(true); $function->setName($methodName); $params = $simpleParams = $inputs = array(); foreach ($infos['inputs'] as $name => $type) { $classType = $this->getElement($type); if (isset($this->simpleTypeCLass[$classType->getName()]) && $isChild === true) { $requestModel = $classType->getName(); $class->addUse($this->getType($classType->getName(), $classType->getNamespace())); foreach ($this->simpleTypeCLass[$classType->getName()] as $subname => $subtype) { $docblock->addVar($subname, $subtype, 'Value of ' . $subname); $function->addParam($subname); $simpleParams[] = $subname; } } else { $docblock->addVar($name, $this->getType($classType->getName(), $classType->getNamespace()), 'Value of ' . $name); $class->addUse($this->getType($classType->getName(), $classType->getNamespace())); $function->addParam($name, $this->getArgType($classType->getName())); $params[] = '$' . $name; } } $childBody = array('$response = parent::_' . $methodName . '(' . implode(', ', $params) . ');', 'return $response;'); if (count($simpleParams) > 0) { $childBody = array('$request = new ' . $requestModel . '();'); foreach ($simpleParams as $simpleParam) { $childBody[] = '$request->' . $simpleParam . '= $' . $simpleParam . ';'; } $childBody[] = 'return parent::_' . $methodName . '($request);'; } $content = $isChild === true ? $childBody : array('return $this->__soapCall("' . $method . '", array(' . implode(',', $params) . '));'); $function->setContent($content); $class->addFunction($function); } return $this; }