From 40f97e6bfe636729c460a335feb8a8303f02a833 Mon Sep 17 00:00:00 2001 From: Yuriy Belenko Date: Mon, 2 Jul 2018 22:45:58 +0500 Subject: [PATCH 1/2] [Slim] Decouple Api files into separated PHP Classes This enhancement required for modular testing and code coverage generating. --- .../languages/PhpSlimServerCodegen.java | 54 +++++++--- .../AbstractApiController.mustache | 63 +++++++++++ .../resources/php-slim-server/api.mustache | 102 ++++++++++++++++++ .../resources/php-slim-server/composer.json | 6 -- .../php-slim-server/composer.mustache | 9 ++ .../resources/php-slim-server/index.mustache | 38 +------ .../resources/php-slim-server/model.mustache | 2 +- 7 files changed, 213 insertions(+), 61 deletions(-) create mode 100644 modules/openapi-generator/src/main/resources/php-slim-server/AbstractApiController.mustache create mode 100644 modules/openapi-generator/src/main/resources/php-slim-server/api.mustache delete mode 100644 modules/openapi-generator/src/main/resources/php-slim-server/composer.json create mode 100644 modules/openapi-generator/src/main/resources/php-slim-server/composer.mustache diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PhpSlimServerCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PhpSlimServerCodegen.java index 3cade86ac1ad..a24865228727 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PhpSlimServerCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PhpSlimServerCodegen.java @@ -48,13 +48,11 @@ public PhpSlimServerCodegen() { variableNamingConvention = "camelCase"; artifactVersion = "1.0.0"; packagePath = ""; // empty packagePath (top folder) - invokerPackage = camelize("OpenAPIServer"); - modelPackage = packagePath + "\\Models"; - apiPackage = packagePath; + setInvokerPackage("OpenAPIServer"); + apiPackage = invokerPackage + "\\" + apiDirName; + modelPackage = invokerPackage + "\\" + modelDirName; outputFolder = "generated-code" + File.separator + "slim"; - // no api files - apiTemplateFiles.clear(); // no test files apiTestTemplateFiles.clear(); // no doc files @@ -63,11 +61,9 @@ public PhpSlimServerCodegen() { embeddedTemplateDir = templateDir = "php-slim-server"; - // additionalProperties.put(CodegenConstants.INVOKER_PACKAGE, invokerPackage); additionalProperties.put(CodegenConstants.GROUP_ID, groupId); - additionalProperties.put(CodegenConstants.ARTIFACT_ID, artifactId); - // additionalProperties.put(CodegenConstants.ARTIFACT_VERSION, artifactVersion); - + additionalProperties.put(CodegenConstants.ARTIFACT_ID, artifactId); + // override cliOptions from AbstractPhpCodegen for (CliOption co : cliOptions) { if (co.getOpt().equals(AbstractPhpCodegen.VARIABLE_NAMING_CONVENTION)) { @@ -75,14 +71,8 @@ public PhpSlimServerCodegen() { co.setDefault("camelCase"); break; } - } - - supportingFiles.add(new SupportingFile("README.mustache", packagePath.replace('/', File.separatorChar), "README.md")); - supportingFiles.add(new SupportingFile("composer.json", packagePath.replace('/', File.separatorChar), "composer.json")); - supportingFiles.add(new SupportingFile("index.mustache", packagePath.replace('/', File.separatorChar), "index.php")); - supportingFiles.add(new SupportingFile(".htaccess", packagePath.replace('/', File.separatorChar), ".htaccess")); - supportingFiles.add(new SupportingFile(".gitignore", packagePath.replace('/', File.separatorChar), ".gitignore")); - } + } + } @Override public CodegenType getTag() { @@ -99,6 +89,36 @@ public String getHelp() { return "Generates a PHP Slim Framework server library."; } + @Override + public String apiFileFolder() { + if (apiPackage.matches("^" + invokerPackage + "\\\\*(.+)")) { + // need to strip out invokerPackage from path + return (outputFolder + File.separator + toPackagePath(apiPackage.replaceFirst("^" + invokerPackage + "\\\\*(.+)", "$1"), srcBasePath)); + } + return (outputFolder + File.separator + toPackagePath(apiPackage, srcBasePath)); + } + + @Override + public String modelFileFolder() { + if (modelPackage.matches("^" + invokerPackage + "\\\\*(.+)")) { + // need to strip out invokerPackage from path + return (outputFolder + File.separator + toPackagePath(modelPackage.replaceFirst("^" + invokerPackage + "\\\\*(.+)", "$1"), srcBasePath)); + } + return (outputFolder + File.separator + toPackagePath(modelPackage, srcBasePath)); + } + + @Override + public void processOpts() { + super.processOpts(); + + supportingFiles.add(new SupportingFile("README.mustache", getPackagePath(), "README.md")); + supportingFiles.add(new SupportingFile("composer.mustache", getPackagePath(), "composer.json")); + supportingFiles.add(new SupportingFile("index.mustache", getPackagePath(), "index.php")); + supportingFiles.add(new SupportingFile(".htaccess", getPackagePath(), ".htaccess")); + supportingFiles.add(new SupportingFile(".gitignore", getPackagePath(), ".gitignore")); + supportingFiles.add(new SupportingFile("AbstractApiController.mustache", toSrcPath(invokerPackage, srcBasePath), "AbstractApiController.php")); + } + @Override public Map postProcessOperationsWithModels(Map objs, List allModels) { Map operations = (Map) objs.get("operations"); diff --git a/modules/openapi-generator/src/main/resources/php-slim-server/AbstractApiController.mustache b/modules/openapi-generator/src/main/resources/php-slim-server/AbstractApiController.mustache new file mode 100644 index 000000000000..c058491dd4e4 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/php-slim-server/AbstractApiController.mustache @@ -0,0 +1,63 @@ +container = $container; + } + +} diff --git a/modules/openapi-generator/src/main/resources/php-slim-server/api.mustache b/modules/openapi-generator/src/main/resources/php-slim-server/api.mustache new file mode 100644 index 000000000000..84e2b6a1acd9 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/php-slim-server/api.mustache @@ -0,0 +1,102 @@ +getHeaders(); + {{#headerParams}} + ${{paramName}} = $request->hasHeader('{{baseName}}') ? $headers['{{baseName}}'] : null; + {{/headerParams}} + {{/hasHeaderParams}} + {{#hasPathParams}} + {{#pathParams}} + ${{paramName}} = $args['{{baseName}}']; + {{/pathParams}} + {{/hasPathParams}} + {{#hasQueryParams}} + $queryParams = $request->getQueryParams(); + {{#queryParams}} + ${{paramName}} = $request->getQueryParam('{{baseName}}'); + {{/queryParams}} + {{/hasQueryParams}} + {{#hasFormParams}} + {{#formParams}} + {{^isFile}} + ${{paramName}} = $request->getParsedBodyParam('{{baseName}}'); + {{/isFile}} + {{#isFile}} + ${{paramName}} = (key_exists('{{baseName}}', $request->getUploadedFiles())) ? $request->getUploadedFiles()['{{baseName}}'] : null; + {{/isFile}} + {{/formParams}} + {{/hasFormParams}} + {{#hasBodyParam}} + $body = $request->getParsedBody(); + {{/hasBodyParam}} + $response->write('How about implementing {{nickname}} as a {{httpMethod}} method ?'); + return $response; + } + {{#hasMore}}{{/hasMore}} + {{/operation}} + {{/operations}} +} diff --git a/modules/openapi-generator/src/main/resources/php-slim-server/composer.json b/modules/openapi-generator/src/main/resources/php-slim-server/composer.json deleted file mode 100644 index c55c81817653..000000000000 --- a/modules/openapi-generator/src/main/resources/php-slim-server/composer.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "minimum-stability": "RC", - "require": { - "slim/slim": "3.*" - } -} \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/php-slim-server/composer.mustache b/modules/openapi-generator/src/main/resources/php-slim-server/composer.mustache new file mode 100644 index 000000000000..696e2195d1f0 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/php-slim-server/composer.mustache @@ -0,0 +1,9 @@ +{ + "minimum-stability": "RC", + "require": { + "slim/slim": "3.*" + }, + "autoload": { + "psr-4": { "{{escapedInvokerPackage}}\\": "{{srcBasePath}}/" } + } +} \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/php-slim-server/index.mustache b/modules/openapi-generator/src/main/resources/php-slim-server/index.mustache index 74784585848e..b8f98f43c81a 100644 --- a/modules/openapi-generator/src/main/resources/php-slim-server/index.mustache +++ b/modules/openapi-generator/src/main/resources/php-slim-server/index.mustache @@ -13,44 +13,8 @@ $app = new Slim\App(); * {{httpMethod}} {{nickname}} * Summary: {{summary}} * Notes: {{notes}} - {{#hasProduces}} - * Output-Formats: [{{#produces}}{{{mediaType}}}{{#hasMore}}, {{/hasMore}}{{/produces}}] - {{/hasProduces}} */ -$app->{{httpMethod}}('{{{basePathWithoutHost}}}{{{path}}}', function($request, $response, $args) { - {{#hasHeaderParams}} - $headers = $request->getHeaders(); - {{#headerParams}} - ${{paramName}} = $request->hasHeader('{{baseName}}') ? $headers['{{baseName}}'] : null; - {{/headerParams}} - {{/hasHeaderParams}} - {{#hasPathParams}} - {{#pathParams}} - ${{paramName}} = $args['{{baseName}}']; - {{/pathParams}} - {{/hasPathParams}} - {{#hasQueryParams}} - $queryParams = $request->getQueryParams(); - {{#queryParams}} - ${{paramName}} = $request->getQueryParam('{{baseName}}'); - {{/queryParams}} - {{/hasQueryParams}} - {{#hasFormParams}} - {{#formParams}} - {{^isFile}} - ${{paramName}} = $request->getParsedBodyParam('{{baseName}}'); - {{/isFile}} - {{#isFile}} - ${{paramName}} = (key_exists('{{baseName}}', $request->getUploadedFiles())) ? $request->getUploadedFiles()['{{baseName}}'] : null; - {{/isFile}} - {{/formParams}} - {{/hasFormParams}} - {{#hasBodyParam}} - $body = $request->getParsedBody(); - {{/hasBodyParam}} - $response->write('How about implementing {{nickname}} as a {{httpMethod}} method ?'); - return $response; -}); +$app->{{httpMethod}}('{{{basePathWithoutHost}}}{{{path}}}', \{{apiPackage}}\{{classname}}::class . ':{{operationId}}'); {{/operation}}{{/operations}}{{/apis}}{{/apiInfo}} diff --git a/modules/openapi-generator/src/main/resources/php-slim-server/model.mustache b/modules/openapi-generator/src/main/resources/php-slim-server/model.mustache index 7ba5f441f4d8..dc92d31eb0fb 100644 --- a/modules/openapi-generator/src/main/resources/php-slim-server/model.mustache +++ b/modules/openapi-generator/src/main/resources/php-slim-server/model.mustache @@ -2,7 +2,7 @@ {{#models}}{{#model}}/* * {{classname}} */ -namespace {{package}}; +namespace {{modelPackage}}; /* * {{classname}} From b7addcde8c9f6b4b6276caa14f66dec061890c48 Mon Sep 17 00:00:00 2001 From: Yuriy Belenko Date: Mon, 2 Jul 2018 23:40:36 +0500 Subject: [PATCH 2/2] [Slim] Define all app routes in SlimRouter PHP Class. Generate new samples --- .../languages/PhpSlimServerCodegen.java | 13 +- .../php-slim-server/SlimRouter.mustache | 88 ++++ .../resources/php-slim-server/index.mustache | 15 +- .../resources/php-slim-server/model.mustache | 9 +- .../php-slim/composer.json | 3 + .../petstore-security-test/php-slim/index.php | 18 +- .../php-slim/lib/AbstractApiController.php | 55 +++ .../php-slim/lib/Api/FakeApi.php | 58 +++ .../php-slim/lib/Model/ModelReturn.php | 15 + .../php-slim/lib/Models/ModelReturn.php | 13 - .../php-slim/lib/SlimRouter.php | 72 +++ .../server/petstore/php-slim/composer.json | 3 + samples/server/petstore/php-slim/index.php | 455 +----------------- .../php-slim/lib/AbstractApiController.php | 54 +++ .../php-slim/lib/Api/AnotherFakeApi.php | 58 +++ .../petstore/php-slim/lib/Api/FakeApi.php | 222 +++++++++ .../lib/Api/FakeClassnameTags123Api.php | 58 +++ .../petstore/php-slim/lib/Api/PetApi.php | 192 ++++++++ .../petstore/php-slim/lib/Api/StoreApi.php | 104 ++++ .../petstore/php-slim/lib/Api/UserApi.php | 166 +++++++ .../AdditionalPropertiesClass.php | 13 +- .../petstore/php-slim/lib/Model/Animal.php | 18 + .../lib/{Models => Model}/AnimalFarm.php | 9 +- .../php-slim/lib/Model/ApiResponse.php | 21 + .../ArrayOfArrayOfNumberOnly.php | 10 +- .../{Models => Model}/ArrayOfNumberOnly.php | 10 +- .../petstore/php-slim/lib/Model/ArrayTest.php | 21 + .../php-slim/lib/Model/Capitalization.php | 30 ++ .../petstore/php-slim/lib/Model/Cat.php | 21 + .../petstore/php-slim/lib/Model/Category.php | 18 + .../lib/{Models => Model}/ClassModel.php | 10 +- .../php-slim/lib/{Models => Model}/Client.php | 10 +- .../petstore/php-slim/lib/Model/Dog.php | 21 + .../lib/{Models => Model}/EnumArrays.php | 13 +- .../lib/{Models => Model}/EnumClass.php | 9 +- .../petstore/php-slim/lib/Model/EnumTest.php | 27 ++ .../php-slim/lib/Model/FormatTest.php | 51 ++ .../lib/{Models => Model}/HasOnlyReadOnly.php | 13 +- .../petstore/php-slim/lib/Model/MapTest.php | 24 + ...PropertiesAndAdditionalPropertiesClass.php | 16 +- .../{Models => Model}/Model200Response.php | 13 +- .../lib/{Models => Model}/ModelList.php | 10 +- .../lib/{Models => Model}/ModelReturn.php | 10 +- .../petstore/php-slim/lib/Model/Name.php | 24 + .../lib/{Models => Model}/NumberOnly.php | 10 +- .../petstore/php-slim/lib/Model/Order.php | 30 ++ .../lib/{Models => Model}/OuterComposite.php | 16 +- .../lib/{Models => Model}/OuterEnum.php | 9 +- .../petstore/php-slim/lib/Model/Pet.php | 30 ++ .../lib/{Models => Model}/ReadOnlyFirst.php | 13 +- .../{Models => Model}/SpecialModelName.php | 10 +- .../{Models => Model}/StringBooleanMap.php | 9 +- .../petstore/php-slim/lib/Model/Tag.php | 18 + .../petstore/php-slim/lib/Model/User.php | 36 ++ .../petstore/php-slim/lib/Models/Animal.php | 15 - .../php-slim/lib/Models/ApiResponse.php | 17 - .../php-slim/lib/Models/ArrayTest.php | 17 - .../php-slim/lib/Models/Capitalization.php | 23 - .../petstore/php-slim/lib/Models/Cat.php | 17 - .../petstore/php-slim/lib/Models/Category.php | 15 - .../petstore/php-slim/lib/Models/Dog.php | 17 - .../petstore/php-slim/lib/Models/EnumTest.php | 21 - .../php-slim/lib/Models/FormatTest.php | 37 -- .../petstore/php-slim/lib/Models/MapTest.php | 19 - .../petstore/php-slim/lib/Models/Name.php | 19 - .../petstore/php-slim/lib/Models/Order.php | 23 - .../petstore/php-slim/lib/Models/Pet.php | 23 - .../petstore/php-slim/lib/Models/Tag.php | 15 - .../petstore/php-slim/lib/Models/User.php | 27 -- .../petstore/php-slim/lib/SlimRouter.php | 108 +++++ 70 files changed, 1797 insertions(+), 890 deletions(-) create mode 100644 modules/openapi-generator/src/main/resources/php-slim-server/SlimRouter.mustache create mode 100644 samples/server/petstore-security-test/php-slim/lib/AbstractApiController.php create mode 100644 samples/server/petstore-security-test/php-slim/lib/Api/FakeApi.php create mode 100644 samples/server/petstore-security-test/php-slim/lib/Model/ModelReturn.php delete mode 100644 samples/server/petstore-security-test/php-slim/lib/Models/ModelReturn.php create mode 100644 samples/server/petstore-security-test/php-slim/lib/SlimRouter.php create mode 100644 samples/server/petstore/php-slim/lib/AbstractApiController.php create mode 100644 samples/server/petstore/php-slim/lib/Api/AnotherFakeApi.php create mode 100644 samples/server/petstore/php-slim/lib/Api/FakeApi.php create mode 100644 samples/server/petstore/php-slim/lib/Api/FakeClassnameTags123Api.php create mode 100644 samples/server/petstore/php-slim/lib/Api/PetApi.php create mode 100644 samples/server/petstore/php-slim/lib/Api/StoreApi.php create mode 100644 samples/server/petstore/php-slim/lib/Api/UserApi.php rename samples/server/petstore/php-slim/lib/{Models => Model}/AdditionalPropertiesClass.php (51%) create mode 100644 samples/server/petstore/php-slim/lib/Model/Animal.php rename samples/server/petstore/php-slim/lib/{Models => Model}/AnimalFarm.php (59%) create mode 100644 samples/server/petstore/php-slim/lib/Model/ApiResponse.php rename samples/server/petstore/php-slim/lib/{Models => Model}/ArrayOfArrayOfNumberOnly.php (61%) rename samples/server/petstore/php-slim/lib/{Models => Model}/ArrayOfNumberOnly.php (58%) create mode 100644 samples/server/petstore/php-slim/lib/Model/ArrayTest.php create mode 100644 samples/server/petstore/php-slim/lib/Model/Capitalization.php create mode 100644 samples/server/petstore/php-slim/lib/Model/Cat.php create mode 100644 samples/server/petstore/php-slim/lib/Model/Category.php rename samples/server/petstore/php-slim/lib/{Models => Model}/ClassModel.php (54%) rename samples/server/petstore/php-slim/lib/{Models => Model}/Client.php (50%) create mode 100644 samples/server/petstore/php-slim/lib/Model/Dog.php rename samples/server/petstore/php-slim/lib/{Models => Model}/EnumArrays.php (50%) rename samples/server/petstore/php-slim/lib/{Models => Model}/EnumClass.php (58%) create mode 100644 samples/server/petstore/php-slim/lib/Model/EnumTest.php create mode 100644 samples/server/petstore/php-slim/lib/Model/FormatTest.php rename samples/server/petstore/php-slim/lib/{Models => Model}/HasOnlyReadOnly.php (53%) create mode 100644 samples/server/petstore/php-slim/lib/Model/MapTest.php rename samples/server/petstore/php-slim/lib/{Models => Model}/MixedPropertiesAndAdditionalPropertiesClass.php (56%) rename samples/server/petstore/php-slim/lib/{Models => Model}/Model200Response.php (55%) rename samples/server/petstore/php-slim/lib/{Models => Model}/ModelList.php (53%) rename samples/server/petstore/php-slim/lib/{Models => Model}/ModelReturn.php (56%) create mode 100644 samples/server/petstore/php-slim/lib/Model/Name.php rename samples/server/petstore/php-slim/lib/{Models => Model}/NumberOnly.php (54%) create mode 100644 samples/server/petstore/php-slim/lib/Model/Order.php rename samples/server/petstore/php-slim/lib/{Models => Model}/OuterComposite.php (51%) rename samples/server/petstore/php-slim/lib/{Models => Model}/OuterEnum.php (58%) create mode 100644 samples/server/petstore/php-slim/lib/Model/Pet.php rename samples/server/petstore/php-slim/lib/{Models => Model}/ReadOnlyFirst.php (52%) rename samples/server/petstore/php-slim/lib/{Models => Model}/SpecialModelName.php (58%) rename samples/server/petstore/php-slim/lib/{Models => Model}/StringBooleanMap.php (65%) create mode 100644 samples/server/petstore/php-slim/lib/Model/Tag.php create mode 100644 samples/server/petstore/php-slim/lib/Model/User.php delete mode 100644 samples/server/petstore/php-slim/lib/Models/Animal.php delete mode 100644 samples/server/petstore/php-slim/lib/Models/ApiResponse.php delete mode 100644 samples/server/petstore/php-slim/lib/Models/ArrayTest.php delete mode 100644 samples/server/petstore/php-slim/lib/Models/Capitalization.php delete mode 100644 samples/server/petstore/php-slim/lib/Models/Cat.php delete mode 100644 samples/server/petstore/php-slim/lib/Models/Category.php delete mode 100644 samples/server/petstore/php-slim/lib/Models/Dog.php delete mode 100644 samples/server/petstore/php-slim/lib/Models/EnumTest.php delete mode 100644 samples/server/petstore/php-slim/lib/Models/FormatTest.php delete mode 100644 samples/server/petstore/php-slim/lib/Models/MapTest.php delete mode 100644 samples/server/petstore/php-slim/lib/Models/Name.php delete mode 100644 samples/server/petstore/php-slim/lib/Models/Order.php delete mode 100644 samples/server/petstore/php-slim/lib/Models/Pet.php delete mode 100644 samples/server/petstore/php-slim/lib/Models/Tag.php delete mode 100644 samples/server/petstore/php-slim/lib/Models/User.php create mode 100644 samples/server/petstore/php-slim/lib/SlimRouter.php diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PhpSlimServerCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PhpSlimServerCodegen.java index a24865228727..273c3c1d3787 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PhpSlimServerCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PhpSlimServerCodegen.java @@ -62,7 +62,7 @@ public PhpSlimServerCodegen() { embeddedTemplateDir = templateDir = "php-slim-server"; additionalProperties.put(CodegenConstants.GROUP_ID, groupId); - additionalProperties.put(CodegenConstants.ARTIFACT_ID, artifactId); + additionalProperties.put(CodegenConstants.ARTIFACT_ID, artifactId); // override cliOptions from AbstractPhpCodegen for (CliOption co : cliOptions) { @@ -71,8 +71,8 @@ public PhpSlimServerCodegen() { co.setDefault("camelCase"); break; } - } - } + } + } @Override public CodegenType getTag() { @@ -94,7 +94,7 @@ public String apiFileFolder() { if (apiPackage.matches("^" + invokerPackage + "\\\\*(.+)")) { // need to strip out invokerPackage from path return (outputFolder + File.separator + toPackagePath(apiPackage.replaceFirst("^" + invokerPackage + "\\\\*(.+)", "$1"), srcBasePath)); - } + } return (outputFolder + File.separator + toPackagePath(apiPackage, srcBasePath)); } @@ -115,8 +115,9 @@ public void processOpts() { supportingFiles.add(new SupportingFile("composer.mustache", getPackagePath(), "composer.json")); supportingFiles.add(new SupportingFile("index.mustache", getPackagePath(), "index.php")); supportingFiles.add(new SupportingFile(".htaccess", getPackagePath(), ".htaccess")); - supportingFiles.add(new SupportingFile(".gitignore", getPackagePath(), ".gitignore")); - supportingFiles.add(new SupportingFile("AbstractApiController.mustache", toSrcPath(invokerPackage, srcBasePath), "AbstractApiController.php")); + supportingFiles.add(new SupportingFile(".gitignore", getPackagePath(), ".gitignore")); + supportingFiles.add(new SupportingFile("AbstractApiController.mustache", toSrcPath(invokerPackage, srcBasePath), "AbstractApiController.php")); + supportingFiles.add(new SupportingFile("SlimRouter.mustache", toSrcPath(invokerPackage, srcBasePath), "SlimRouter.php")); } @Override diff --git a/modules/openapi-generator/src/main/resources/php-slim-server/SlimRouter.mustache b/modules/openapi-generator/src/main/resources/php-slim-server/SlimRouter.mustache new file mode 100644 index 000000000000..7636cab3e01d --- /dev/null +++ b/modules/openapi-generator/src/main/resources/php-slim-server/SlimRouter.mustache @@ -0,0 +1,88 @@ +{{httpMethod}}('{{{basePathWithoutHost}}}{{{path}}}', {{classname}}::class . ':{{operationId}}'); + {{/operation}} + {{/operations}} + {{/apis}} + + $this->slimApp = $app; + } + + /** + * Returns Slim Framework instance + * @return App + */ + public function getSlimApp() { + return $this->slimApp; + } +} +{{/apiInfo}} diff --git a/modules/openapi-generator/src/main/resources/php-slim-server/index.mustache b/modules/openapi-generator/src/main/resources/php-slim-server/index.mustache index b8f98f43c81a..704b3f3b52d5 100644 --- a/modules/openapi-generator/src/main/resources/php-slim-server/index.mustache +++ b/modules/openapi-generator/src/main/resources/php-slim-server/index.mustache @@ -6,16 +6,9 @@ require_once __DIR__ . '/vendor/autoload.php'; -$app = new Slim\App(); - -{{#apis}}{{#operations}}{{#operation}} -/** - * {{httpMethod}} {{nickname}} - * Summary: {{summary}} - * Notes: {{notes}} - */ -$app->{{httpMethod}}('{{{basePathWithoutHost}}}{{{path}}}', \{{apiPackage}}\{{classname}}::class . ':{{operationId}}'); - -{{/operation}}{{/operations}}{{/apis}}{{/apiInfo}} +use {{invokerPackage}}\SlimRouter; +{{/apiInfo}} +$router = new SlimRouter(); +$app = $router->getSlimApp(); $app->run(); diff --git a/modules/openapi-generator/src/main/resources/php-slim-server/model.mustache b/modules/openapi-generator/src/main/resources/php-slim-server/model.mustache index dc92d31eb0fb..94fd28ef53fe 100644 --- a/modules/openapi-generator/src/main/resources/php-slim-server/model.mustache +++ b/modules/openapi-generator/src/main/resources/php-slim-server/model.mustache @@ -1,15 +1,18 @@ PUT('/fake', function($request, $response, $args) { - $body = $request->getParsedBody(); - $response->write('How about implementing testCodeInjectEndRnNR as a PUT method ?'); - return $response; -}); - - +use OpenAPIServer\SlimRouter; +$router = new SlimRouter(); +$app = $router->getSlimApp(); $app->run(); diff --git a/samples/server/petstore-security-test/php-slim/lib/AbstractApiController.php b/samples/server/petstore-security-test/php-slim/lib/AbstractApiController.php new file mode 100644 index 000000000000..f2097c6d3869 --- /dev/null +++ b/samples/server/petstore-security-test/php-slim/lib/AbstractApiController.php @@ -0,0 +1,55 @@ +container = $container; + } + +} diff --git a/samples/server/petstore-security-test/php-slim/lib/Api/FakeApi.php b/samples/server/petstore-security-test/php-slim/lib/Api/FakeApi.php new file mode 100644 index 000000000000..a931eae1a0ad --- /dev/null +++ b/samples/server/petstore-security-test/php-slim/lib/Api/FakeApi.php @@ -0,0 +1,58 @@ +getParsedBody(); + $response->write('How about implementing testCodeInjectEndRnNR as a PUT method ?'); + return $response; + } + +} diff --git a/samples/server/petstore-security-test/php-slim/lib/Model/ModelReturn.php b/samples/server/petstore-security-test/php-slim/lib/Model/ModelReturn.php new file mode 100644 index 000000000000..bc2165d08d0f --- /dev/null +++ b/samples/server/petstore-security-test/php-slim/lib/Model/ModelReturn.php @@ -0,0 +1,15 @@ +PUT('/fake', FakeApi::class . ':testCodeInjectEndRnNR'); + + $this->slimApp = $app; + } + + /** + * Returns Slim Framework instance + * @return App + */ + public function getSlimApp() { + return $this->slimApp; + } +} diff --git a/samples/server/petstore/php-slim/composer.json b/samples/server/petstore/php-slim/composer.json index c55c81817653..5e9f23d24644 100644 --- a/samples/server/petstore/php-slim/composer.json +++ b/samples/server/petstore/php-slim/composer.json @@ -2,5 +2,8 @@ "minimum-stability": "RC", "require": { "slim/slim": "3.*" + }, + "autoload": { + "psr-4": { "OpenAPIServer\\": "lib/" } } } \ No newline at end of file diff --git a/samples/server/petstore/php-slim/index.php b/samples/server/petstore/php-slim/index.php index dc0849ad7959..7a69dc94812b 100644 --- a/samples/server/petstore/php-slim/index.php +++ b/samples/server/petstore/php-slim/index.php @@ -6,457 +6,8 @@ require_once __DIR__ . '/vendor/autoload.php'; -$app = new Slim\App(); - - -/** - * PATCH testSpecialTags - * Summary: To test special tags - * Notes: To test special tags - * Output-Formats: [application/json] - */ -$app->PATCH('/v2/another-fake/dummy', function($request, $response, $args) { - $body = $request->getParsedBody(); - $response->write('How about implementing testSpecialTags as a PATCH method ?'); - return $response; -}); - - -/** - * POST fakeOuterBooleanSerialize - * Summary: - * Notes: Test serialization of outer boolean types - * Output-Formats: [*_/_*] - */ -$app->POST('/v2/fake/outer/boolean', function($request, $response, $args) { - $body = $request->getParsedBody(); - $response->write('How about implementing fakeOuterBooleanSerialize as a POST method ?'); - return $response; -}); - - -/** - * POST fakeOuterCompositeSerialize - * Summary: - * Notes: Test serialization of object with outer number type - * Output-Formats: [*_/_*] - */ -$app->POST('/v2/fake/outer/composite', function($request, $response, $args) { - $body = $request->getParsedBody(); - $response->write('How about implementing fakeOuterCompositeSerialize as a POST method ?'); - return $response; -}); - - -/** - * POST fakeOuterNumberSerialize - * Summary: - * Notes: Test serialization of outer number types - * Output-Formats: [*_/_*] - */ -$app->POST('/v2/fake/outer/number', function($request, $response, $args) { - $body = $request->getParsedBody(); - $response->write('How about implementing fakeOuterNumberSerialize as a POST method ?'); - return $response; -}); - - -/** - * POST fakeOuterStringSerialize - * Summary: - * Notes: Test serialization of outer string types - * Output-Formats: [*_/_*] - */ -$app->POST('/v2/fake/outer/string', function($request, $response, $args) { - $body = $request->getParsedBody(); - $response->write('How about implementing fakeOuterStringSerialize as a POST method ?'); - return $response; -}); - - -/** - * PUT testBodyWithQueryParams - * Summary: - * Notes: - */ -$app->PUT('/v2/fake/body-with-query-params', function($request, $response, $args) { - $queryParams = $request->getQueryParams(); - $query = $request->getQueryParam('query'); - $body = $request->getParsedBody(); - $response->write('How about implementing testBodyWithQueryParams as a PUT method ?'); - return $response; -}); - - -/** - * PATCH testClientModel - * Summary: To test \"client\" model - * Notes: To test \"client\" model - * Output-Formats: [application/json] - */ -$app->PATCH('/v2/fake', function($request, $response, $args) { - $body = $request->getParsedBody(); - $response->write('How about implementing testClientModel as a PATCH method ?'); - return $response; -}); - - -/** - * POST testEndpointParameters - * Summary: Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 - * Notes: Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 - */ -$app->POST('/v2/fake', function($request, $response, $args) { - $integer = $request->getParsedBodyParam('integer'); - $int32 = $request->getParsedBodyParam('int32'); - $int64 = $request->getParsedBodyParam('int64'); - $number = $request->getParsedBodyParam('number'); - $float = $request->getParsedBodyParam('float'); - $double = $request->getParsedBodyParam('double'); - $string = $request->getParsedBodyParam('string'); - $patternWithoutDelimiter = $request->getParsedBodyParam('pattern_without_delimiter'); - $byte = $request->getParsedBodyParam('byte'); - $binary = (key_exists('binary', $request->getUploadedFiles())) ? $request->getUploadedFiles()['binary'] : null; - $date = $request->getParsedBodyParam('date'); - $dateTime = $request->getParsedBodyParam('dateTime'); - $password = $request->getParsedBodyParam('password'); - $callback = $request->getParsedBodyParam('callback'); - $response->write('How about implementing testEndpointParameters as a POST method ?'); - return $response; -}); - - -/** - * GET testEnumParameters - * Summary: To test enum parameters - * Notes: To test enum parameters - */ -$app->GET('/v2/fake', function($request, $response, $args) { - $headers = $request->getHeaders(); - $enumHeaderStringArray = $request->hasHeader('enum_header_string_array') ? $headers['enum_header_string_array'] : null; - $enumHeaderString = $request->hasHeader('enum_header_string') ? $headers['enum_header_string'] : null; - $queryParams = $request->getQueryParams(); - $enumQueryStringArray = $request->getQueryParam('enum_query_string_array'); - $enumQueryString = $request->getQueryParam('enum_query_string'); - $enumQueryInteger = $request->getQueryParam('enum_query_integer'); - $enumQueryDouble = $request->getQueryParam('enum_query_double'); - $enumFormStringArray = $request->getParsedBodyParam('enum_form_string_array'); - $enumFormString = $request->getParsedBodyParam('enum_form_string'); - $response->write('How about implementing testEnumParameters as a GET method ?'); - return $response; -}); - - -/** - * POST testInlineAdditionalProperties - * Summary: test inline additionalProperties - * Notes: - */ -$app->POST('/v2/fake/inline-additionalProperties', function($request, $response, $args) { - $body = $request->getParsedBody(); - $response->write('How about implementing testInlineAdditionalProperties as a POST method ?'); - return $response; -}); - - -/** - * GET testJsonFormData - * Summary: test json serialization of form data - * Notes: - */ -$app->GET('/v2/fake/jsonFormData', function($request, $response, $args) { - $param = $request->getParsedBodyParam('param'); - $param2 = $request->getParsedBodyParam('param2'); - $response->write('How about implementing testJsonFormData as a GET method ?'); - return $response; -}); - - -/** - * PATCH testClassname - * Summary: To test class name in snake case - * Notes: To test class name in snake case - * Output-Formats: [application/json] - */ -$app->PATCH('/v2/fake_classname_test', function($request, $response, $args) { - $body = $request->getParsedBody(); - $response->write('How about implementing testClassname as a PATCH method ?'); - return $response; -}); - - -/** - * POST addPet - * Summary: Add a new pet to the store - * Notes: - */ -$app->POST('/v2/pet', function($request, $response, $args) { - $body = $request->getParsedBody(); - $response->write('How about implementing addPet as a POST method ?'); - return $response; -}); - - -/** - * GET findPetsByStatus - * Summary: Finds Pets by status - * Notes: Multiple status values can be provided with comma separated strings - * Output-Formats: [application/xml, application/json] - */ -$app->GET('/v2/pet/findByStatus', function($request, $response, $args) { - $queryParams = $request->getQueryParams(); - $status = $request->getQueryParam('status'); - $response->write('How about implementing findPetsByStatus as a GET method ?'); - return $response; -}); - - -/** - * GET findPetsByTags - * Summary: Finds Pets by tags - * Notes: Multiple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing. - * Output-Formats: [application/xml, application/json] - */ -$app->GET('/v2/pet/findByTags', function($request, $response, $args) { - $queryParams = $request->getQueryParams(); - $tags = $request->getQueryParam('tags'); - $response->write('How about implementing findPetsByTags as a GET method ?'); - return $response; -}); - - -/** - * PUT updatePet - * Summary: Update an existing pet - * Notes: - */ -$app->PUT('/v2/pet', function($request, $response, $args) { - $body = $request->getParsedBody(); - $response->write('How about implementing updatePet as a PUT method ?'); - return $response; -}); - - -/** - * DELETE deletePet - * Summary: Deletes a pet - * Notes: - */ -$app->DELETE('/v2/pet/{petId}', function($request, $response, $args) { - $headers = $request->getHeaders(); - $apiKey = $request->hasHeader('api_key') ? $headers['api_key'] : null; - $petId = $args['petId']; - $response->write('How about implementing deletePet as a DELETE method ?'); - return $response; -}); - - -/** - * GET getPetById - * Summary: Find pet by ID - * Notes: Returns a single pet - * Output-Formats: [application/xml, application/json] - */ -$app->GET('/v2/pet/{petId}', function($request, $response, $args) { - $petId = $args['petId']; - $response->write('How about implementing getPetById as a GET method ?'); - return $response; -}); - - -/** - * POST updatePetWithForm - * Summary: Updates a pet in the store with form data - * Notes: - */ -$app->POST('/v2/pet/{petId}', function($request, $response, $args) { - $petId = $args['petId']; - $name = $request->getParsedBodyParam('name'); - $status = $request->getParsedBodyParam('status'); - $response->write('How about implementing updatePetWithForm as a POST method ?'); - return $response; -}); - - -/** - * POST uploadFile - * Summary: uploads an image - * Notes: - * Output-Formats: [application/json] - */ -$app->POST('/v2/pet/{petId}/uploadImage', function($request, $response, $args) { - $petId = $args['petId']; - $additionalMetadata = $request->getParsedBodyParam('additionalMetadata'); - $file = (key_exists('file', $request->getUploadedFiles())) ? $request->getUploadedFiles()['file'] : null; - $response->write('How about implementing uploadFile as a POST method ?'); - return $response; -}); - - -/** - * POST uploadFileWithRequiredFile - * Summary: uploads an image (required) - * Notes: - * Output-Formats: [application/json] - */ -$app->POST('/v2/fake/{petId}/uploadImageWithRequiredFile', function($request, $response, $args) { - $petId = $args['petId']; - $additionalMetadata = $request->getParsedBodyParam('additionalMetadata'); - $file = (key_exists('file', $request->getUploadedFiles())) ? $request->getUploadedFiles()['file'] : null; - $response->write('How about implementing uploadFileWithRequiredFile as a POST method ?'); - return $response; -}); - - -/** - * GET getInventory - * Summary: Returns pet inventories by status - * Notes: Returns a map of status codes to quantities - * Output-Formats: [application/json] - */ -$app->GET('/v2/store/inventory', function($request, $response, $args) { - $response->write('How about implementing getInventory as a GET method ?'); - return $response; -}); - - -/** - * POST placeOrder - * Summary: Place an order for a pet - * Notes: - * Output-Formats: [application/xml, application/json] - */ -$app->POST('/v2/store/order', function($request, $response, $args) { - $body = $request->getParsedBody(); - $response->write('How about implementing placeOrder as a POST method ?'); - return $response; -}); - - -/** - * DELETE deleteOrder - * Summary: Delete purchase order by ID - * Notes: For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors - */ -$app->DELETE('/v2/store/order/{order_id}', function($request, $response, $args) { - $orderId = $args['order_id']; - $response->write('How about implementing deleteOrder as a DELETE method ?'); - return $response; -}); - - -/** - * GET getOrderById - * Summary: Find purchase order by ID - * Notes: For valid response try integer IDs with value <= 5 or > 10. Other values will generated exceptions - * Output-Formats: [application/xml, application/json] - */ -$app->GET('/v2/store/order/{order_id}', function($request, $response, $args) { - $orderId = $args['order_id']; - $response->write('How about implementing getOrderById as a GET method ?'); - return $response; -}); - - -/** - * POST createUser - * Summary: Create user - * Notes: This can only be done by the logged in user. - */ -$app->POST('/v2/user', function($request, $response, $args) { - $body = $request->getParsedBody(); - $response->write('How about implementing createUser as a POST method ?'); - return $response; -}); - - -/** - * POST createUsersWithArrayInput - * Summary: Creates list of users with given input array - * Notes: - */ -$app->POST('/v2/user/createWithArray', function($request, $response, $args) { - $body = $request->getParsedBody(); - $response->write('How about implementing createUsersWithArrayInput as a POST method ?'); - return $response; -}); - - -/** - * POST createUsersWithListInput - * Summary: Creates list of users with given input array - * Notes: - */ -$app->POST('/v2/user/createWithList', function($request, $response, $args) { - $body = $request->getParsedBody(); - $response->write('How about implementing createUsersWithListInput as a POST method ?'); - return $response; -}); - - -/** - * GET loginUser - * Summary: Logs user into the system - * Notes: - * Output-Formats: [application/xml, application/json] - */ -$app->GET('/v2/user/login', function($request, $response, $args) { - $queryParams = $request->getQueryParams(); - $username = $request->getQueryParam('username'); - $password = $request->getQueryParam('password'); - $response->write('How about implementing loginUser as a GET method ?'); - return $response; -}); - - -/** - * GET logoutUser - * Summary: Logs out current logged in user session - * Notes: - */ -$app->GET('/v2/user/logout', function($request, $response, $args) { - $response->write('How about implementing logoutUser as a GET method ?'); - return $response; -}); - - -/** - * DELETE deleteUser - * Summary: Delete user - * Notes: This can only be done by the logged in user. - */ -$app->DELETE('/v2/user/{username}', function($request, $response, $args) { - $username = $args['username']; - $response->write('How about implementing deleteUser as a DELETE method ?'); - return $response; -}); - - -/** - * GET getUserByName - * Summary: Get user by user name - * Notes: - * Output-Formats: [application/xml, application/json] - */ -$app->GET('/v2/user/{username}', function($request, $response, $args) { - $username = $args['username']; - $response->write('How about implementing getUserByName as a GET method ?'); - return $response; -}); - - -/** - * PUT updateUser - * Summary: Updated user - * Notes: This can only be done by the logged in user. - */ -$app->PUT('/v2/user/{username}', function($request, $response, $args) { - $username = $args['username']; - $body = $request->getParsedBody(); - $response->write('How about implementing updateUser as a PUT method ?'); - return $response; -}); - - +use OpenAPIServer\SlimRouter; +$router = new SlimRouter(); +$app = $router->getSlimApp(); $app->run(); diff --git a/samples/server/petstore/php-slim/lib/AbstractApiController.php b/samples/server/petstore/php-slim/lib/AbstractApiController.php new file mode 100644 index 000000000000..7f1ee4141914 --- /dev/null +++ b/samples/server/petstore/php-slim/lib/AbstractApiController.php @@ -0,0 +1,54 @@ +container = $container; + } + +} diff --git a/samples/server/petstore/php-slim/lib/Api/AnotherFakeApi.php b/samples/server/petstore/php-slim/lib/Api/AnotherFakeApi.php new file mode 100644 index 000000000000..1888e1319cbc --- /dev/null +++ b/samples/server/petstore/php-slim/lib/Api/AnotherFakeApi.php @@ -0,0 +1,58 @@ +getParsedBody(); + $response->write('How about implementing testSpecialTags as a PATCH method ?'); + return $response; + } + +} diff --git a/samples/server/petstore/php-slim/lib/Api/FakeApi.php b/samples/server/petstore/php-slim/lib/Api/FakeApi.php new file mode 100644 index 000000000000..8baa4619a763 --- /dev/null +++ b/samples/server/petstore/php-slim/lib/Api/FakeApi.php @@ -0,0 +1,222 @@ +getParsedBody(); + $response->write('How about implementing fakeOuterBooleanSerialize as a POST method ?'); + return $response; + } + + /** + * POST fakeOuterCompositeSerialize + * Summary: + * Notes: Test serialization of object with outer number type + * Output-Formats: [*_/_*] + * + * @param \Psr\Http\Message\ServerRequestInterface $request Request + * @param \Psr\Http\Message\ResponseInterface $response Response + * @param array|null $args Path arguments + */ + public function fakeOuterCompositeSerialize($request, $response, $args) { + $body = $request->getParsedBody(); + $response->write('How about implementing fakeOuterCompositeSerialize as a POST method ?'); + return $response; + } + + /** + * POST fakeOuterNumberSerialize + * Summary: + * Notes: Test serialization of outer number types + * Output-Formats: [*_/_*] + * + * @param \Psr\Http\Message\ServerRequestInterface $request Request + * @param \Psr\Http\Message\ResponseInterface $response Response + * @param array|null $args Path arguments + */ + public function fakeOuterNumberSerialize($request, $response, $args) { + $body = $request->getParsedBody(); + $response->write('How about implementing fakeOuterNumberSerialize as a POST method ?'); + return $response; + } + + /** + * POST fakeOuterStringSerialize + * Summary: + * Notes: Test serialization of outer string types + * Output-Formats: [*_/_*] + * + * @param \Psr\Http\Message\ServerRequestInterface $request Request + * @param \Psr\Http\Message\ResponseInterface $response Response + * @param array|null $args Path arguments + */ + public function fakeOuterStringSerialize($request, $response, $args) { + $body = $request->getParsedBody(); + $response->write('How about implementing fakeOuterStringSerialize as a POST method ?'); + return $response; + } + + /** + * PUT testBodyWithQueryParams + * Summary: + * Notes: + * + * @param \Psr\Http\Message\ServerRequestInterface $request Request + * @param \Psr\Http\Message\ResponseInterface $response Response + * @param array|null $args Path arguments + */ + public function testBodyWithQueryParams($request, $response, $args) { + $queryParams = $request->getQueryParams(); + $query = $request->getQueryParam('query'); + $body = $request->getParsedBody(); + $response->write('How about implementing testBodyWithQueryParams as a PUT method ?'); + return $response; + } + + /** + * PATCH testClientModel + * Summary: To test \"client\" model + * Notes: To test \"client\" model + * Output-Formats: [application/json] + * + * @param \Psr\Http\Message\ServerRequestInterface $request Request + * @param \Psr\Http\Message\ResponseInterface $response Response + * @param array|null $args Path arguments + */ + public function testClientModel($request, $response, $args) { + $body = $request->getParsedBody(); + $response->write('How about implementing testClientModel as a PATCH method ?'); + return $response; + } + + /** + * POST testEndpointParameters + * Summary: Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 + * Notes: Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 + * + * @param \Psr\Http\Message\ServerRequestInterface $request Request + * @param \Psr\Http\Message\ResponseInterface $response Response + * @param array|null $args Path arguments + */ + public function testEndpointParameters($request, $response, $args) { + $integer = $request->getParsedBodyParam('integer'); + $int32 = $request->getParsedBodyParam('int32'); + $int64 = $request->getParsedBodyParam('int64'); + $number = $request->getParsedBodyParam('number'); + $float = $request->getParsedBodyParam('float'); + $double = $request->getParsedBodyParam('double'); + $string = $request->getParsedBodyParam('string'); + $patternWithoutDelimiter = $request->getParsedBodyParam('pattern_without_delimiter'); + $byte = $request->getParsedBodyParam('byte'); + $binary = (key_exists('binary', $request->getUploadedFiles())) ? $request->getUploadedFiles()['binary'] : null; + $date = $request->getParsedBodyParam('date'); + $dateTime = $request->getParsedBodyParam('dateTime'); + $password = $request->getParsedBodyParam('password'); + $callback = $request->getParsedBodyParam('callback'); + $response->write('How about implementing testEndpointParameters as a POST method ?'); + return $response; + } + + /** + * GET testEnumParameters + * Summary: To test enum parameters + * Notes: To test enum parameters + * + * @param \Psr\Http\Message\ServerRequestInterface $request Request + * @param \Psr\Http\Message\ResponseInterface $response Response + * @param array|null $args Path arguments + */ + public function testEnumParameters($request, $response, $args) { + $headers = $request->getHeaders(); + $enumHeaderStringArray = $request->hasHeader('enum_header_string_array') ? $headers['enum_header_string_array'] : null; + $enumHeaderString = $request->hasHeader('enum_header_string') ? $headers['enum_header_string'] : null; + $queryParams = $request->getQueryParams(); + $enumQueryStringArray = $request->getQueryParam('enum_query_string_array'); + $enumQueryString = $request->getQueryParam('enum_query_string'); + $enumQueryInteger = $request->getQueryParam('enum_query_integer'); + $enumQueryDouble = $request->getQueryParam('enum_query_double'); + $enumFormStringArray = $request->getParsedBodyParam('enum_form_string_array'); + $enumFormString = $request->getParsedBodyParam('enum_form_string'); + $response->write('How about implementing testEnumParameters as a GET method ?'); + return $response; + } + + /** + * POST testInlineAdditionalProperties + * Summary: test inline additionalProperties + * Notes: + * + * @param \Psr\Http\Message\ServerRequestInterface $request Request + * @param \Psr\Http\Message\ResponseInterface $response Response + * @param array|null $args Path arguments + */ + public function testInlineAdditionalProperties($request, $response, $args) { + $body = $request->getParsedBody(); + $response->write('How about implementing testInlineAdditionalProperties as a POST method ?'); + return $response; + } + + /** + * GET testJsonFormData + * Summary: test json serialization of form data + * Notes: + * + * @param \Psr\Http\Message\ServerRequestInterface $request Request + * @param \Psr\Http\Message\ResponseInterface $response Response + * @param array|null $args Path arguments + */ + public function testJsonFormData($request, $response, $args) { + $param = $request->getParsedBodyParam('param'); + $param2 = $request->getParsedBodyParam('param2'); + $response->write('How about implementing testJsonFormData as a GET method ?'); + return $response; + } + +} diff --git a/samples/server/petstore/php-slim/lib/Api/FakeClassnameTags123Api.php b/samples/server/petstore/php-slim/lib/Api/FakeClassnameTags123Api.php new file mode 100644 index 000000000000..e824913c4e34 --- /dev/null +++ b/samples/server/petstore/php-slim/lib/Api/FakeClassnameTags123Api.php @@ -0,0 +1,58 @@ +getParsedBody(); + $response->write('How about implementing testClassname as a PATCH method ?'); + return $response; + } + +} diff --git a/samples/server/petstore/php-slim/lib/Api/PetApi.php b/samples/server/petstore/php-slim/lib/Api/PetApi.php new file mode 100644 index 000000000000..666b0e5ab9ab --- /dev/null +++ b/samples/server/petstore/php-slim/lib/Api/PetApi.php @@ -0,0 +1,192 @@ +getParsedBody(); + $response->write('How about implementing addPet as a POST method ?'); + return $response; + } + + /** + * DELETE deletePet + * Summary: Deletes a pet + * Notes: + * + * @param \Psr\Http\Message\ServerRequestInterface $request Request + * @param \Psr\Http\Message\ResponseInterface $response Response + * @param array|null $args Path arguments + */ + public function deletePet($request, $response, $args) { + $headers = $request->getHeaders(); + $apiKey = $request->hasHeader('api_key') ? $headers['api_key'] : null; + $petId = $args['petId']; + $response->write('How about implementing deletePet as a DELETE method ?'); + return $response; + } + + /** + * GET findPetsByStatus + * Summary: Finds Pets by status + * Notes: Multiple status values can be provided with comma separated strings + * Output-Formats: [application/xml, application/json] + * + * @param \Psr\Http\Message\ServerRequestInterface $request Request + * @param \Psr\Http\Message\ResponseInterface $response Response + * @param array|null $args Path arguments + */ + public function findPetsByStatus($request, $response, $args) { + $queryParams = $request->getQueryParams(); + $status = $request->getQueryParam('status'); + $response->write('How about implementing findPetsByStatus as a GET method ?'); + return $response; + } + + /** + * GET findPetsByTags + * Summary: Finds Pets by tags + * Notes: Multiple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing. + * Output-Formats: [application/xml, application/json] + * + * @param \Psr\Http\Message\ServerRequestInterface $request Request + * @param \Psr\Http\Message\ResponseInterface $response Response + * @param array|null $args Path arguments + */ + public function findPetsByTags($request, $response, $args) { + $queryParams = $request->getQueryParams(); + $tags = $request->getQueryParam('tags'); + $response->write('How about implementing findPetsByTags as a GET method ?'); + return $response; + } + + /** + * GET getPetById + * Summary: Find pet by ID + * Notes: Returns a single pet + * Output-Formats: [application/xml, application/json] + * + * @param \Psr\Http\Message\ServerRequestInterface $request Request + * @param \Psr\Http\Message\ResponseInterface $response Response + * @param array|null $args Path arguments + */ + public function getPetById($request, $response, $args) { + $petId = $args['petId']; + $response->write('How about implementing getPetById as a GET method ?'); + return $response; + } + + /** + * PUT updatePet + * Summary: Update an existing pet + * Notes: + * + * @param \Psr\Http\Message\ServerRequestInterface $request Request + * @param \Psr\Http\Message\ResponseInterface $response Response + * @param array|null $args Path arguments + */ + public function updatePet($request, $response, $args) { + $body = $request->getParsedBody(); + $response->write('How about implementing updatePet as a PUT method ?'); + return $response; + } + + /** + * POST updatePetWithForm + * Summary: Updates a pet in the store with form data + * Notes: + * + * @param \Psr\Http\Message\ServerRequestInterface $request Request + * @param \Psr\Http\Message\ResponseInterface $response Response + * @param array|null $args Path arguments + */ + public function updatePetWithForm($request, $response, $args) { + $petId = $args['petId']; + $name = $request->getParsedBodyParam('name'); + $status = $request->getParsedBodyParam('status'); + $response->write('How about implementing updatePetWithForm as a POST method ?'); + return $response; + } + + /** + * POST uploadFile + * Summary: uploads an image + * Notes: + * Output-Formats: [application/json] + * + * @param \Psr\Http\Message\ServerRequestInterface $request Request + * @param \Psr\Http\Message\ResponseInterface $response Response + * @param array|null $args Path arguments + */ + public function uploadFile($request, $response, $args) { + $petId = $args['petId']; + $additionalMetadata = $request->getParsedBodyParam('additionalMetadata'); + $file = (key_exists('file', $request->getUploadedFiles())) ? $request->getUploadedFiles()['file'] : null; + $response->write('How about implementing uploadFile as a POST method ?'); + return $response; + } + + /** + * POST uploadFileWithRequiredFile + * Summary: uploads an image (required) + * Notes: + * Output-Formats: [application/json] + * + * @param \Psr\Http\Message\ServerRequestInterface $request Request + * @param \Psr\Http\Message\ResponseInterface $response Response + * @param array|null $args Path arguments + */ + public function uploadFileWithRequiredFile($request, $response, $args) { + $petId = $args['petId']; + $additionalMetadata = $request->getParsedBodyParam('additionalMetadata'); + $file = (key_exists('file', $request->getUploadedFiles())) ? $request->getUploadedFiles()['file'] : null; + $response->write('How about implementing uploadFileWithRequiredFile as a POST method ?'); + return $response; + } + +} diff --git a/samples/server/petstore/php-slim/lib/Api/StoreApi.php b/samples/server/petstore/php-slim/lib/Api/StoreApi.php new file mode 100644 index 000000000000..181c66337eb3 --- /dev/null +++ b/samples/server/petstore/php-slim/lib/Api/StoreApi.php @@ -0,0 +1,104 @@ +write('How about implementing deleteOrder as a DELETE method ?'); + return $response; + } + + /** + * GET getInventory + * Summary: Returns pet inventories by status + * Notes: Returns a map of status codes to quantities + * Output-Formats: [application/json] + * + * @param \Psr\Http\Message\ServerRequestInterface $request Request + * @param \Psr\Http\Message\ResponseInterface $response Response + * @param array|null $args Path arguments + */ + public function getInventory($request, $response, $args) { + $response->write('How about implementing getInventory as a GET method ?'); + return $response; + } + + /** + * GET getOrderById + * Summary: Find purchase order by ID + * Notes: For valid response try integer IDs with value <= 5 or > 10. Other values will generated exceptions + * Output-Formats: [application/xml, application/json] + * + * @param \Psr\Http\Message\ServerRequestInterface $request Request + * @param \Psr\Http\Message\ResponseInterface $response Response + * @param array|null $args Path arguments + */ + public function getOrderById($request, $response, $args) { + $orderId = $args['order_id']; + $response->write('How about implementing getOrderById as a GET method ?'); + return $response; + } + + /** + * POST placeOrder + * Summary: Place an order for a pet + * Notes: + * Output-Formats: [application/xml, application/json] + * + * @param \Psr\Http\Message\ServerRequestInterface $request Request + * @param \Psr\Http\Message\ResponseInterface $response Response + * @param array|null $args Path arguments + */ + public function placeOrder($request, $response, $args) { + $body = $request->getParsedBody(); + $response->write('How about implementing placeOrder as a POST method ?'); + return $response; + } + +} diff --git a/samples/server/petstore/php-slim/lib/Api/UserApi.php b/samples/server/petstore/php-slim/lib/Api/UserApi.php new file mode 100644 index 000000000000..4ba8c652b71a --- /dev/null +++ b/samples/server/petstore/php-slim/lib/Api/UserApi.php @@ -0,0 +1,166 @@ +getParsedBody(); + $response->write('How about implementing createUser as a POST method ?'); + return $response; + } + + /** + * POST createUsersWithArrayInput + * Summary: Creates list of users with given input array + * Notes: + * + * @param \Psr\Http\Message\ServerRequestInterface $request Request + * @param \Psr\Http\Message\ResponseInterface $response Response + * @param array|null $args Path arguments + */ + public function createUsersWithArrayInput($request, $response, $args) { + $body = $request->getParsedBody(); + $response->write('How about implementing createUsersWithArrayInput as a POST method ?'); + return $response; + } + + /** + * POST createUsersWithListInput + * Summary: Creates list of users with given input array + * Notes: + * + * @param \Psr\Http\Message\ServerRequestInterface $request Request + * @param \Psr\Http\Message\ResponseInterface $response Response + * @param array|null $args Path arguments + */ + public function createUsersWithListInput($request, $response, $args) { + $body = $request->getParsedBody(); + $response->write('How about implementing createUsersWithListInput as a POST method ?'); + return $response; + } + + /** + * DELETE deleteUser + * Summary: Delete user + * Notes: This can only be done by the logged in user. + * + * @param \Psr\Http\Message\ServerRequestInterface $request Request + * @param \Psr\Http\Message\ResponseInterface $response Response + * @param array|null $args Path arguments + */ + public function deleteUser($request, $response, $args) { + $username = $args['username']; + $response->write('How about implementing deleteUser as a DELETE method ?'); + return $response; + } + + /** + * GET getUserByName + * Summary: Get user by user name + * Notes: + * Output-Formats: [application/xml, application/json] + * + * @param \Psr\Http\Message\ServerRequestInterface $request Request + * @param \Psr\Http\Message\ResponseInterface $response Response + * @param array|null $args Path arguments + */ + public function getUserByName($request, $response, $args) { + $username = $args['username']; + $response->write('How about implementing getUserByName as a GET method ?'); + return $response; + } + + /** + * GET loginUser + * Summary: Logs user into the system + * Notes: + * Output-Formats: [application/xml, application/json] + * + * @param \Psr\Http\Message\ServerRequestInterface $request Request + * @param \Psr\Http\Message\ResponseInterface $response Response + * @param array|null $args Path arguments + */ + public function loginUser($request, $response, $args) { + $queryParams = $request->getQueryParams(); + $username = $request->getQueryParam('username'); + $password = $request->getQueryParam('password'); + $response->write('How about implementing loginUser as a GET method ?'); + return $response; + } + + /** + * GET logoutUser + * Summary: Logs out current logged in user session + * Notes: + * + * @param \Psr\Http\Message\ServerRequestInterface $request Request + * @param \Psr\Http\Message\ResponseInterface $response Response + * @param array|null $args Path arguments + */ + public function logoutUser($request, $response, $args) { + $response->write('How about implementing logoutUser as a GET method ?'); + return $response; + } + + /** + * PUT updateUser + * Summary: Updated user + * Notes: This can only be done by the logged in user. + * + * @param \Psr\Http\Message\ServerRequestInterface $request Request + * @param \Psr\Http\Message\ResponseInterface $response Response + * @param array|null $args Path arguments + */ + public function updateUser($request, $response, $args) { + $username = $args['username']; + $body = $request->getParsedBody(); + $response->write('How about implementing updateUser as a PUT method ?'); + return $response; + } + +} diff --git a/samples/server/petstore/php-slim/lib/Models/AdditionalPropertiesClass.php b/samples/server/petstore/php-slim/lib/Model/AdditionalPropertiesClass.php similarity index 51% rename from samples/server/petstore/php-slim/lib/Models/AdditionalPropertiesClass.php rename to samples/server/petstore/php-slim/lib/Model/AdditionalPropertiesClass.php index f41a1fe67a6a..460fd8573bb0 100644 --- a/samples/server/petstore/php-slim/lib/Models/AdditionalPropertiesClass.php +++ b/samples/server/petstore/php-slim/lib/Model/AdditionalPropertiesClass.php @@ -1,15 +1,18 @@ PATCH('/v2/another-fake/dummy', AnotherFakeApi::class . ':testSpecialTags'); + $app->POST('/v2/fake/outer/boolean', FakeApi::class . ':fakeOuterBooleanSerialize'); + $app->POST('/v2/fake/outer/composite', FakeApi::class . ':fakeOuterCompositeSerialize'); + $app->POST('/v2/fake/outer/number', FakeApi::class . ':fakeOuterNumberSerialize'); + $app->POST('/v2/fake/outer/string', FakeApi::class . ':fakeOuterStringSerialize'); + $app->PUT('/v2/fake/body-with-query-params', FakeApi::class . ':testBodyWithQueryParams'); + $app->PATCH('/v2/fake', FakeApi::class . ':testClientModel'); + $app->POST('/v2/fake', FakeApi::class . ':testEndpointParameters'); + $app->GET('/v2/fake', FakeApi::class . ':testEnumParameters'); + $app->POST('/v2/fake/inline-additionalProperties', FakeApi::class . ':testInlineAdditionalProperties'); + $app->GET('/v2/fake/jsonFormData', FakeApi::class . ':testJsonFormData'); + $app->PATCH('/v2/fake_classname_test', FakeClassnameTags123Api::class . ':testClassname'); + $app->POST('/v2/pet', PetApi::class . ':addPet'); + $app->GET('/v2/pet/findByStatus', PetApi::class . ':findPetsByStatus'); + $app->GET('/v2/pet/findByTags', PetApi::class . ':findPetsByTags'); + $app->PUT('/v2/pet', PetApi::class . ':updatePet'); + $app->DELETE('/v2/pet/{petId}', PetApi::class . ':deletePet'); + $app->GET('/v2/pet/{petId}', PetApi::class . ':getPetById'); + $app->POST('/v2/pet/{petId}', PetApi::class . ':updatePetWithForm'); + $app->POST('/v2/pet/{petId}/uploadImage', PetApi::class . ':uploadFile'); + $app->POST('/v2/fake/{petId}/uploadImageWithRequiredFile', PetApi::class . ':uploadFileWithRequiredFile'); + $app->GET('/v2/store/inventory', StoreApi::class . ':getInventory'); + $app->POST('/v2/store/order', StoreApi::class . ':placeOrder'); + $app->DELETE('/v2/store/order/{order_id}', StoreApi::class . ':deleteOrder'); + $app->GET('/v2/store/order/{order_id}', StoreApi::class . ':getOrderById'); + $app->POST('/v2/user', UserApi::class . ':createUser'); + $app->POST('/v2/user/createWithArray', UserApi::class . ':createUsersWithArrayInput'); + $app->POST('/v2/user/createWithList', UserApi::class . ':createUsersWithListInput'); + $app->GET('/v2/user/login', UserApi::class . ':loginUser'); + $app->GET('/v2/user/logout', UserApi::class . ':logoutUser'); + $app->DELETE('/v2/user/{username}', UserApi::class . ':deleteUser'); + $app->GET('/v2/user/{username}', UserApi::class . ':getUserByName'); + $app->PUT('/v2/user/{username}', UserApi::class . ':updateUser'); + + $this->slimApp = $app; + } + + /** + * Returns Slim Framework instance + * @return App + */ + public function getSlimApp() { + return $this->slimApp; + } +}