/** * 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; }
/** * Generate service class from definition * * @param array $definition Class definition * @param string $service Service name * * @return array */ protected function getServiceClassesFromDefinitions(array $definition, $service) { $classes = array(); $namespace = $this->getNamespace(); $name = ucfirst($service); $class = new Classes(); $class->setName($name); $class->setNamespace($namespace); $class->setDocblock($this->getDocBlock('Proxy for ' . $name . ' service')); $class->setExtends('\\SoapClient'); if ($this->hasOverwrite()) { $parent = new Classes(); $parent->setName($name); $parent->setNamespace($namespace . '\\Base'); $parent->setDocblock($this->getDocBlock('Parent model for proxy for ' . $name . ' service')); $parent->setExtends('\\SoapClient'); $parent->isAbstract(true); $classes[] = $parent; $class->addUse('\\' . $namespace . '\\Base\\' . $name, $name . 'Base'); $class->setExtends($name . 'Base'); $this->addParamsForService($parent); $this->addConstructForService($parent); $this->addServicesFromDefinition($parent, $definition, false); $this->addServicesFromDefinition($class, $definition, true); } else { $this->addParamsForService($class); $this->addConstructForService($class); $this->addServicesFromDefinition($class, $definition); } $classes[] = $class; return $classes; }