Пример #1
0
 /**
  * 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;
 }
Пример #2
0
 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;
 }