protected function generateDocblock($requestTypeName, $requestType, $returnType)
 {
     $docblock = $this->getDocblockGenerator();
     $scalarTypes = $this->getScalarTypes();
     $isScalarReturn = false;
     if (isset($scalarTypes[$returnType])) {
         $returnType = $scalarTypes[$returnType];
         $isScalarReturn = true;
     }
     if ($requestNamespace = $this->getRequestNamespace()) {
         $requestType = Soap::REQUEST_NAMESPACE_ALIAS . '\\' . $requestType;
         if (!$isScalarReturn) {
             $returnType = Soap::RESPONSE_NAMESPACE_ALIAS . '\\' . $returnType;
         }
     }
     $apiTag = new CodeGenerator\DocBlock\Tag();
     $apiTag->setName('api');
     $docblock->setTag($apiTag);
     $parameterTag = new CodeGenerator\DocBlock\Tag\ParamTag();
     $parameterTag->setDataType($requestType);
     $parameterTag->setParamName(lcfirst($requestTypeName));
     $docblock->setTag($parameterTag);
     $returnTag = new CodeGenerator\DocBlock\Tag\ReturnTag();
     $returnTag->setDataType($returnType);
     $docblock->setTag($returnTag);
     return $docblock;
 }
示例#2
0
 public function generate()
 {
     $method = $this->getMethodGenerator();
     $api = $this->getApi();
     $operation = $this->getOperation();
     $method->setName($operation->getNickname());
     $parameterClassGenerator = $this->getParameterClassGenerator();
     $parameterClassGenerator->setName($operation->getNickname());
     $parameterGenerator = $this->getParameterGenerator();
     $propertyGenerator = $this->getPropertyGenerator();
     $docBlockGenerator = $this->getDocblockGenerator();
     $docBlockGenerator->setShortDescription($operation->getSummary());
     $docBlockGenerator->setLongDescription(strip_tags($operation->getNotes()));
     $hasRequired = false;
     $routeParams = array();
     foreach ($operation->getParameters() as $swaggerParameter) {
         switch ($swaggerParameter->getParamType()) {
             case self::PARAM_TYPE_PATH:
                 if ($swaggerParameter->getRequired()) {
                     $hasRequired = true;
                 }
                 $parameters = $method->getParameters();
                 if (isset($parameters[$swaggerParameter->getName()])) {
                     continue;
                 }
                 $parameter = clone $parameterGenerator;
                 $parameter->setName($swaggerParameter->getName());
                 $method->setParameter($parameter);
                 $paramTag = new CodeGenerator\DocBlock\Tag\ParamTag();
                 $paramTag->setDataType($swaggerParameter::getType($swaggerParameter->getDataType()));
                 $paramTag->setParamName($swaggerParameter->getName());
                 $paramDescription = $swaggerParameter->getDescription();
                 $paramTag->setDescription($paramDescription);
                 $docBlockGenerator->setTag($paramTag);
                 $routeParams[] = $parameter;
                 break;
             case self::PARAM_TYPE_QUERY:
             case self::PARAM_TYPE_FORM:
                 $propertyName = lcfirst($swaggerParameter->getName());
                 if (($postParamStart = strpos($propertyName, '[')) !== false) {
                     $propertyPostParams = substr($propertyName, $postParamStart);
                     $propertyName = substr($propertyName, 0, $postParamStart);
                     echo "{$method->getName()}::\${$propertyName} has: {$propertyPostParams}" . PHP_EOL;
                 }
                 if ($parameterClassGenerator->hasProperty($propertyName)) {
                     continue;
                 }
                 $property = clone $propertyGenerator;
                 $property->setName($propertyName);
                 $propertyDocblock = new CodeGenerator\DocBlockGenerator();
                 $propertyDocblock->setShortDescription($swaggerParameter->getDescription());
                 $propertyDescription = '';
                 if ($allowableValues = $swaggerParameter->getAllowableValues()) {
                     if ($allowableValues->getValueType() == 'LIST') {
                         $propertyDescription .= 'Allowable values: [' . implode(', ', $allowableValues->getValues()) . ']' . PHP_EOL;
                     }
                 }
                 $propertyDocblock->setLongDescription($propertyDescription);
                 if (!$this->isDocBlockEmpty($propertyDocblock)) {
                     $property->setDocBlock($propertyDocblock);
                 }
                 $parameterClassGenerator->addPropertyFromGenerator($property);
                 $getterGenerator = $this->generateParameterGetter($propertyName, $swaggerParameter);
                 $setterGenerator = $this->generateParameterSetter($propertyName, $swaggerParameter);
                 $parameterClassGenerator->addMethods(array($getterGenerator, $setterGenerator));
                 break;
         }
     }
     if (count($parameterClassGenerator->getProperties())) {
         $queryParameter = clone $parameterGenerator;
         $queryParameter->setName($operation->getNickname());
         $queryParameter->setType(RestGenerator::REQUEST_NAMESPACE_ALIAS . '\\' . $operation->getNickname());
         if (!$hasRequired) {
             $queryParameter->setDefaultValue(new CodeGenerator\ValueGenerator(null));
         }
         $paramTag = new CodeGenerator\DocBlock\Tag\ParamTag();
         $paramTag->setDataType(RestGenerator::REQUEST_NAMESPACE_ALIAS . '\\' . $operation->getNickname());
         $paramTag->setParamName($operation->getNickname());
         if (!$hasRequired) {
             $paramTag->setDescription(' = null');
         }
         $docBlockGenerator->setTag($paramTag);
         $method->setParameter($queryParameter);
     } else {
         $queryParameter = null;
     }
     $method->setDocBlock($docBlockGenerator);
     $body = $this->getBody($routeParams, $queryParameter);
     $method->setBody($body);
 }