diff --git a/bin/openapi3/php-slim4-server-petstore.sh b/bin/openapi3/php-slim4-server-petstore.sh
new file mode 100755
index 0000000000000000000000000000000000000000..904c4675b3fa637894b4c8e050185db19ae54772
--- /dev/null
+++ b/bin/openapi3/php-slim4-server-petstore.sh
@@ -0,0 +1,32 @@
+#!/bin/sh
+
+SCRIPT="$0"
+echo "# START SCRIPT: $SCRIPT"
+
+while [ -h "$SCRIPT" ] ; do
+  ls=`ls -ld "$SCRIPT"`
+  link=`expr "$ls" : '.*-> \(.*\)$'`
+  if expr "$link" : '/.*' > /dev/null; then
+    SCRIPT="$link"
+  else
+    SCRIPT=`dirname "$SCRIPT"`/"$link"
+  fi
+done
+
+if [ ! -d "${APP_DIR}" ]; then
+  APP_DIR=`dirname "$SCRIPT"`/..
+  APP_DIR=`cd "${APP_DIR}"; pwd`
+fi
+
+executable="./modules/openapi-generator-cli/target/openapi-generator-cli.jar"
+
+if [ ! -f "$executable" ]
+then
+  mvn clean package
+fi
+
+# if you've executed sbt assembly previously it will use that instead.
+export JAVA_OPTS="${JAVA_OPTS} -Xmx1024M -DloggerPath=conf/log4j.properties"
+ags="generate -t modules/openapi-generator/src/main/resources/php-slim4-server -i modules/openapi-generator/src/test/resources/3_0/petstore.yaml -g php-slim4 -o samples/server/petstore/php-slim4 $@"
+
+java $JAVA_OPTS -jar $executable $ags
diff --git a/bin/php-slim4-server-petstore.sh b/bin/php-slim4-server-petstore.sh
new file mode 100755
index 0000000000000000000000000000000000000000..a87ebbcc7ac9b7d7bd4fb7ec2f49d3932cab1e7b
--- /dev/null
+++ b/bin/php-slim4-server-petstore.sh
@@ -0,0 +1,32 @@
+#!/bin/sh
+
+SCRIPT="$0"
+echo "# START SCRIPT: $SCRIPT"
+
+while [ -h "$SCRIPT" ] ; do
+  ls=`ls -ld "$SCRIPT"`
+  link=`expr "$ls" : '.*-> \(.*\)$'`
+  if expr "$link" : '/.*' > /dev/null; then
+    SCRIPT="$link"
+  else
+    SCRIPT=`dirname "$SCRIPT"`/"$link"
+  fi
+done
+
+if [ ! -d "${APP_DIR}" ]; then
+  APP_DIR=`dirname "$SCRIPT"`/..
+  APP_DIR=`cd "${APP_DIR}"; pwd`
+fi
+
+executable="./modules/openapi-generator-cli/target/openapi-generator-cli.jar"
+
+if [ ! -f "$executable" ]
+then
+  mvn -B clean package
+fi
+
+# if you've executed sbt assembly previously it will use that instead.
+export JAVA_OPTS="${JAVA_OPTS} -Xmx1024M -DloggerPath=conf/log4j.properties"
+ags="generate -t modules/openapi-generator/src/main/resources/php-slim4-server -i modules/openapi-generator/src/test/resources/2_0/petstore-with-fake-endpoints-models-for-testing.yaml -g php-slim4 -o samples/server/petstore/php-slim4 $@"
+
+java $JAVA_OPTS -jar $executable $ags
diff --git a/bin/utils/ensure-up-to-date b/bin/utils/ensure-up-to-date
index adc1993015f1b65d4313f7bcdb37f12ce7ae745e..4793470bf2216452bc04bdbd2cbc053208140432 100755
--- a/bin/utils/ensure-up-to-date
+++ b/bin/utils/ensure-up-to-date
@@ -39,6 +39,7 @@ declare -a scripts=(
 "./bin/php-symfony-petstore.sh"
 "./bin/php-lumen-petstore-server.sh"
 "./bin/php-slim-server-petstore.sh"
+"./bin/php-slim4-server-petstore.sh"
 "./bin/php-ze-ph-petstore-server.sh"
 "./bin/openapi3/php-petstore.sh"
 "./bin/typescript-angularjs-petstore.sh"
diff --git a/bin/windows/php-slim4-server-petstore.bat b/bin/windows/php-slim4-server-petstore.bat
new file mode 100644
index 0000000000000000000000000000000000000000..c1ac0ef7325dd1b03d086c64e21250bdf86dd717
--- /dev/null
+++ b/bin/windows/php-slim4-server-petstore.bat
@@ -0,0 +1,10 @@
+set executable=.\modules\openapi-generator-cli\target\openapi-generator-cli.jar
+
+If Not Exist %executable% (
+  mvn clean package
+)
+
+REM set JAVA_OPTS=%JAVA_OPTS% -Xmx1024M
+set ags=generate -i modules\openapi-generator\src\test\resources\2_0\petstore-with-fake-endpoints-models-for-testing.yaml -g php-slim4 -o samples\server\petstore\php-slim4
+
+java %JAVA_OPTS% -jar %executable% %ags%
diff --git a/docs/generators.md b/docs/generators.md
index 849200fecb3ff8d5327c0eb81d0cfff74845c1d1..91b859ca707e2615552075a026dafd4b22817034 100644
--- a/docs/generators.md
+++ b/docs/generators.md
@@ -104,6 +104,7 @@ The following generators are available:
 * [php-lumen](generators/php-lumen.md)  
 * [php-silex](generators/php-silex.md)  
 * [php-slim](generators/php-slim.md)  
+* [php-slim4](generators/php-slim4.md)  
 * [php-symfony](generators/php-symfony.md)  
 * [php-ze-ph](generators/php-ze-ph.md)  
 * [python-aiohttp](generators/python-aiohttp.md)  
diff --git a/docs/generators/php-slim4.md b/docs/generators/php-slim4.md
new file mode 100644
index 0000000000000000000000000000000000000000..05307722bbb9e734b8aabe95e7dc54c0fe4e0fff
--- /dev/null
+++ b/docs/generators/php-slim4.md
@@ -0,0 +1,19 @@
+---
+title: Config Options for php-slim4
+sidebar_label: php-slim4
+---
+
+| Option | Description | Values | Default |
+| ------ | ----------- | ------ | ------- |
+|sortParamsByRequiredFlag|Sort method arguments to place required parameters before optional parameters.| |true|
+|ensureUniqueParams|Whether to ensure parameter names are unique in an operation (rename parameters that are not).| |true|
+|allowUnicodeIdentifiers|boolean, toggles whether unicode identifiers are allowed in names or not, default is false| |false|
+|prependFormOrBodyParameters|Add form or body parameters to the beginning of the parameter list.| |false|
+|modelPackage|package for generated models| |null|
+|apiPackage|package for generated api classes| |null|
+|variableNamingConvention|naming convention of variable name, e.g. camelCase.| |camelCase|
+|invokerPackage|The main namespace to use for all classes. e.g. Yay\Pets| |null|
+|packageName|The main package name for classes. e.g. GeneratedPetstore| |null|
+|srcBasePath|The directory to serve as source root.| |null|
+|artifactVersion|The version to use in the composer package version field. e.g. 1.2.3| |null|
+|psr7Implementation|Slim 4 provides its own PSR-7 implementation so that it works out of the box. However, you are free to replace Slim&rsquo;s default PSR-7 objects with a third-party implementation. Ref: https://www.slimframework.com/docs/v4/concepts/value-objects.html|<dl><dt>**slim-psr7**</dt><dd>Slim PSR-7 Message implementation</dd><dt>**nyholm-psr7**</dt><dd>Nyholm PSR-7 Message implementation</dd><dt>**guzzle-psr7**</dt><dd>Guzzle PSR-7 Message implementation</dd><dt>**zend-diactoros**</dt><dd>Zend Diactoros PSR-7 Message implementation</dd><dl>|slim-psr7|
diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PhpSlim4ServerCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PhpSlim4ServerCodegen.java
new file mode 100644
index 0000000000000000000000000000000000000000..c5d07d07eb25a48bac844b6b2b67822c2b6477dc
--- /dev/null
+++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PhpSlim4ServerCodegen.java
@@ -0,0 +1,143 @@
+/*
+ * Copyright 2018 OpenAPI-Generator Contributors (https://openapi-generator.tech)
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.openapitools.codegen.languages;
+
+import io.swagger.v3.oas.models.Operation;
+import io.swagger.v3.oas.models.security.SecurityScheme;
+import io.swagger.v3.oas.models.servers.Server;
+import org.apache.commons.lang3.StringEscapeUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.openapitools.codegen.*;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.File;
+import java.io.UnsupportedEncodingException;
+import java.net.URLEncoder;
+import java.util.*;
+
+import static org.openapitools.codegen.utils.StringUtils.*;
+
+public class PhpSlim4ServerCodegen extends PhpSlimServerCodegen {
+    private static final Logger LOGGER = LoggerFactory.getLogger(PhpSlim4ServerCodegen.class);
+
+    public static final String PSR7_IMPLEMENTATION = "psr7Implementation";
+
+    protected String psr7Implementation = "slim-psr7";
+    protected List<Map<String, String>> composerPackages = new ArrayList<Map<String, String>>();
+    protected List<Map<String, String>> composerDevPackages = new ArrayList<Map<String, String>>();
+
+    public PhpSlim4ServerCodegen() {
+        super();
+
+        outputFolder = "generated-code" + File.separator + "slim4";
+        embeddedTemplateDir = templateDir = "php-slim4-server";
+
+        // override cliOptions from AbstractPhpCodegen
+        updateOption(AbstractPhpCodegen.VARIABLE_NAMING_CONVENTION, "camelCase");
+
+        // Slim 4 can use any PSR-7 implementation
+        // https://www.slimframework.com/docs/v4/concepts/value-objects.html
+        CliOption psr7Option = new CliOption(PSR7_IMPLEMENTATION,
+                "Slim 4 provides its own PSR-7 implementation so that it works out of the box. However, you are free to replace Slim’s default PSR-7 objects with a third-party implementation. Ref: https://www.slimframework.com/docs/v4/concepts/value-objects.html");
+
+        psr7Option.addEnum("slim-psr7", "Slim PSR-7 Message implementation")
+                .addEnum("nyholm-psr7", "Nyholm PSR-7 Message implementation")
+                .addEnum("guzzle-psr7", "Guzzle PSR-7 Message implementation")
+                .addEnum("zend-diactoros", "Zend Diactoros PSR-7 Message implementation")
+                .setDefault("slim-psr7");
+
+        cliOptions.add(psr7Option);
+    }
+
+    @Override
+    public String getName() {
+        return "php-slim4";
+    }
+
+    @Override
+    public String getHelp() {
+        return "Generates a PHP Slim 4 Framework server library.";
+    }
+
+    @Override
+    public void processOpts() {
+        super.processOpts();
+
+        if (additionalProperties.containsKey(PSR7_IMPLEMENTATION)) {
+            this.setPsr7Implementation((String) additionalProperties.get(PSR7_IMPLEMENTATION));
+        }
+
+        // reset implementation flags
+        additionalProperties.put("isSlimPsr7", Boolean.FALSE);
+        additionalProperties.put("isNyholmPsr7", Boolean.FALSE);
+        additionalProperties.put("isGuzzlePsr7", Boolean.FALSE);
+        additionalProperties.put("isZendDiactoros", Boolean.FALSE);
+
+        // set specific PSR-7 implementation flag
+        switch (getPsr7Implementation()) {
+            case "slim-psr7":
+                additionalProperties.put("isSlimPsr7", Boolean.TRUE);
+                break;
+            case "nyholm-psr7":
+                additionalProperties.put("isNyholmPsr7", Boolean.TRUE);
+                break;
+            case "guzzle-psr7":
+                additionalProperties.put("isGuzzlePsr7", Boolean.TRUE);
+                break;
+            case "zend-diactoros":
+                additionalProperties.put("isZendDiactoros", Boolean.TRUE);
+                break;
+            default:
+                LOGGER.warn("\"" + getPsr7Implementation() + "\" is invalid \"psr7Implementation\" codegen option. Default \"slim-psr7\" used instead.");
+                additionalProperties.put("isSlimPsr7", Boolean.TRUE);
+        }
+
+        // Slim 4 doesn't parse JSON body anymore we need to add suggested middleware
+        // ref: https://www.slimframework.com/docs/v4/objects/request.html#the-request-body
+        supportingFiles.add(new SupportingFile("json_body_parser_middleware.mustache", toSrcPath(invokerPackage + "\\Middleware", srcBasePath), "JsonBodyParserMiddleware.php"));
+    }
+
+    /**
+     * Set PSR-7 implementation package.
+     * Ref: https://www.slimframework.com/docs/v4/concepts/value-objects.html
+     *
+     * @param psr7Implementation PSR-7 implementation package
+     */
+    public void setPsr7Implementation(String psr7Implementation) {
+        switch (psr7Implementation) {
+            case "slim-psr7":
+            case "nyholm-psr7":
+            case "guzzle-psr7":
+            case "zend-diactoros":
+                this.psr7Implementation = psr7Implementation;
+                break;
+            default:
+                this.psr7Implementation = "slim-psr7";
+                LOGGER.warn("\"" + (String) psr7Implementation + "\" is invalid \"psr7Implementation\" argument. Default \"slim-psr7\" used instead.");
+        }
+    }
+
+    /**
+     * Returns PSR-7 implementation package.
+     *
+     * @return PSR-7 implementation package
+     */
+    public String getPsr7Implementation() {
+        return this.psr7Implementation;
+    }
+}
diff --git a/modules/openapi-generator/src/main/resources/META-INF/services/org.openapitools.codegen.CodegenConfig b/modules/openapi-generator/src/main/resources/META-INF/services/org.openapitools.codegen.CodegenConfig
index 3313be307ce839fc5f952f6e1adb2c0c3ef6564f..057b3c72e051fa649c39b963dc1d104da479cb4d 100644
--- a/modules/openapi-generator/src/main/resources/META-INF/services/org.openapitools.codegen.CodegenConfig
+++ b/modules/openapi-generator/src/main/resources/META-INF/services/org.openapitools.codegen.CodegenConfig
@@ -76,6 +76,7 @@ org.openapitools.codegen.languages.PhpClientCodegen
 org.openapitools.codegen.languages.PhpLaravelServerCodegen
 org.openapitools.codegen.languages.PhpLumenServerCodegen
 org.openapitools.codegen.languages.PhpSlimServerCodegen
+org.openapitools.codegen.languages.PhpSlim4ServerCodegen
 org.openapitools.codegen.languages.PhpSilexServerCodegen
 org.openapitools.codegen.languages.PhpSymfonyServerCodegen
 org.openapitools.codegen.languages.PhpZendExpressivePathHandlerServerCodegen
diff --git a/modules/openapi-generator/src/main/resources/php-slim4-server/.gitignore b/modules/openapi-generator/src/main/resources/php-slim4-server/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..db204792ea346200de00cca8f2f979744d68e7c4
--- /dev/null
+++ b/modules/openapi-generator/src/main/resources/php-slim4-server/.gitignore
@@ -0,0 +1,17 @@
+# ref: https://github.com/github/gitignore/blob/master/Composer.gitignore
+
+composer.phar
+/vendor/
+
+# Commit your application's lock file https://getcomposer.org/doc/01-basic-usage.md#commit-your-composer-lock-file-to-version-control
+# You may choose to ignore a library lock file http://getcomposer.org/doc/02-libraries.md#lock-file
+# composer.lock
+
+# phplint tool creates cache file which is not necessary in a codebase
+/.phplint-cache
+
+# Do not commit local PHPUnit config
+/phpunit.xml
+
+# Do not commit local PHP_CodeSniffer config
+/phpcs.xml
\ No newline at end of file
diff --git a/modules/openapi-generator/src/main/resources/php-slim4-server/.htaccess b/modules/openapi-generator/src/main/resources/php-slim4-server/.htaccess
new file mode 100644
index 0000000000000000000000000000000000000000..f6a2ceb3952b1ed2c5264752ce35cd7b700b01b3
--- /dev/null
+++ b/modules/openapi-generator/src/main/resources/php-slim4-server/.htaccess
@@ -0,0 +1,6 @@
+<IfModule mod_rewrite.c>
+    RewriteEngine On
+    RewriteCond %{REQUEST_FILENAME} !-f
+    RewriteCond %{REQUEST_FILENAME} !-d
+    RewriteRule ^ index.php [QSA,L]
+</IfModule>
\ No newline at end of file
diff --git a/modules/openapi-generator/src/main/resources/php-slim4-server/README.mustache b/modules/openapi-generator/src/main/resources/php-slim4-server/README.mustache
new file mode 100644
index 0000000000000000000000000000000000000000..8788d0d4676e073fd678c183eec57302be3d67fb
--- /dev/null
+++ b/modules/openapi-generator/src/main/resources/php-slim4-server/README.mustache
@@ -0,0 +1,189 @@
+# {{packageName}} - PHP Slim 4 Server library for {{appName}}
+
+* [OpenAPI Generator](https://openapi-generator.tech)
+* [Slim 4 Documentation](https://www.slimframework.com/docs/v4/)
+
+{{#isSlimPsr7}}
+This server has been generated with [Slim PSR-7](https://github.com/slimphp/Slim-Psr7) implementation.
+{{/isSlimPsr7}}
+{{#isNyholmPsr7}}
+This server has been generated with [Nyholm PSR-7](https://github.com/Nyholm/psr7) implementation and [Nyholm PSR-7 Server](https://github.com/Nyholm/psr7-server).
+{{/isNyholmPsr7}}
+{{#isGuzzlePsr7}}
+This server has been generated with [Guzzle PSR-7](https://github.com/guzzle/psr7) implementation and [Guzzle HTTP Factory](https://github.com/http-interop/http-factory-guzzle).
+{{/isGuzzlePsr7}}
+{{#isZendDiactoros}}
+This server has been generated with [Zend Diactoros](https://github.com/zendframework/zend-diactoros).
+{{/isZendDiactoros}}
+
+## Requirements
+
+* Web server with URL rewriting
+* PHP 7.1 or newer
+
+This package contains `.htaccess` for Apache configuration.
+If you use another server(Nginx, HHVM, IIS, lighttpd) check out [Web Servers](https://www.slimframework.com/docs/v3/start/web-servers.html) doc.
+
+## Installation via [Composer](https://getcomposer.org/)
+
+Navigate into your project's root directory and execute the bash command shown below.
+This command downloads the Slim Framework and its third-party dependencies into your project's `vendor/` directory.
+```bash
+$ composer install
+```
+
+## Start devserver
+
+Run the following command in terminal to start localhost web server, assuming `./php-slim-server/` is public-accessible directory with `index.php` file:
+```bash
+$ php -S localhost:8888 -t php-slim-server
+```
+> **Warning** This web server was designed to aid application development.
+> It may also be useful for testing purposes or for application demonstrations that are run in controlled environments.
+> It is not intended to be a full-featured web server. It should not be used on a public network.
+
+## Tests
+
+### PHPUnit
+
+This package uses PHPUnit 6 or 7(depends from your PHP version) for unit testing.
+[Test folder]({{testBasePath}}) contains templates which you can fill with real test assertions.
+How to write tests read at [PHPUnit Manual - Chapter 2. Writing Tests for PHPUnit](https://phpunit.de/manual/6.5/en/writing-tests-for-phpunit.html).
+
+#### Run
+
+Command | Target
+---- | ----
+`$ composer test` | All tests
+`$ composer test-apis` | Apis tests
+`$ composer test-models` | Models tests
+
+#### Config
+
+Package contains fully functional config `./phpunit.xml.dist` file. Create `./phpunit.xml` in root folder to override it.
+
+Quote from [3. The Command-Line Test Runner — PHPUnit 7.4 Manual](https://phpunit.readthedocs.io/en/7.4/textui.html#command-line-options):
+
+> If phpunit.xml or phpunit.xml.dist (in that order) exist in the current working directory and --configuration is not used, the configuration will be automatically read from that file.
+
+### PHP CodeSniffer
+
+[PHP CodeSniffer Documentation](https://github.com/squizlabs/PHP_CodeSniffer/wiki). This tool helps to follow coding style and avoid common PHP coding mistakes.
+
+#### Run
+
+```bash
+$ composer phpcs
+```
+
+#### Config
+
+Package contains fully functional config `./phpcs.xml.dist` file. It checks source code against PSR-1 and PSR-2 coding standards.
+Create `./phpcs.xml` in root folder to override it. More info at [Using a Default Configuration File](https://github.com/squizlabs/PHP_CodeSniffer/wiki/Advanced-Usage#using-a-default-configuration-file)
+
+### PHPLint
+
+[PHPLint Documentation](https://github.com/overtrue/phplint). Checks PHP syntax only.
+
+#### Run
+
+```bash
+$ composer phplint
+```
+
+## Show errors
+
+Switch on option in `./index.php`:
+```diff
+/**
+ * Add Error Handling Middleware
+ *
+ * @param bool $displayErrorDetails -> Should be set to false in production
+ * @param bool $logErrors -> Parameter is passed to the default ErrorHandler
+ * @param bool $logErrorDetails -> Display error details in error log
+ * which can be replaced by a callable of your choice.
+
+ * Note: This middleware should be added last. It will not handle any exceptions/errors
+ * for middleware added after it.
+ */
+--- $app->addErrorMiddleware(false, true, true);
++++ $app->addErrorMiddleware(true, true, true);
+```
+
+{{#generateApiDocs}}
+## API Endpoints
+
+All URIs are relative to *{{{basePath}}}*
+
+> Important! Do not modify abstract API controllers directly! Instead extend them by implementation classes like:
+
+```php
+// src/Api/PetApi.php
+
+namespace {{apiPackage}};
+
+use {{apiPackage}}\AbstractPetApi;
+
+class PetApi extends AbstractPetApi
+{
+
+    public function addPet($request, $response, $args)
+    {
+        // your implementation of addPet method here
+    }
+}
+```
+
+Place all your implementation classes in `./src` folder accordingly.
+For instance, when abstract class located at `./lib/Api/AbstractPetApi.php` you need to create implementation class at `./src/Api/PetApi.php`.
+
+Class | Method | HTTP request | Description
+------------ | ------------- | ------------- | -------------
+{{#apiInfo}}{{#apis}}{{#operations}}{{#operation}}*{{classname}}* | **{{operationId}}** | **{{httpMethod}}** {{path}} | {{#summary}}{{{summary}}}{{/summary}}
+{{/operation}}{{/operations}}{{/apis}}{{/apiInfo}}
+{{/generateApiDocs}}
+
+{{#generateModelDocs}}
+## Models
+
+{{#modelPackage}}
+{{#models}}{{#model}}* {{{modelPackage}}}\{{{classname}}}
+{{/model}}{{/models}}
+{{/modelPackage}}
+{{^modelPackage}}
+No model defined in this package
+{{/modelPackage}}
+{{/generateModelDocs}}
+
+{{#hasAuthMethods}}
+{{#authMethods}}
+{{^hasMore}}
+## Authentication
+
+{{/hasMore}}
+{{/authMethods}}
+{{#authMethods}}
+{{#isBasic}}
+### Security schema `{{name}}`
+> Important! To make Basic authentication work you need to extend [\{{authPackage}}\{{abstractNamePrefix}}Authenticator{{abstractNameSuffix}}]({{authSrcPath}}/{{abstractNamePrefix}}Authenticator{{abstractNameSuffix}}.php) class by [\{{authPackage}}\BasicAuthenticator](./src/Auth/BasicAuthenticator.php) class.
+
+{{/isBasic}}
+{{#isApiKey}}
+### Security schema `{{name}}`
+> Important! To make ApiKey authentication work you need to extend [\{{authPackage}}\{{abstractNamePrefix}}Authenticator{{abstractNameSuffix}}]({{authSrcPath}}/{{abstractNamePrefix}}Authenticator{{abstractNameSuffix}}.php) class by [\{{authPackage}}\ApiKeyAuthenticator](./src/Auth/ApiKeyAuthenticator.php) class.
+
+{{/isApiKey}}
+{{#isOAuth}}
+### Security schema `{{name}}`
+> Important! To make OAuth authentication work you need to extend [\{{authPackage}}\{{abstractNamePrefix}}Authenticator{{abstractNameSuffix}}]({{authSrcPath}}/{{abstractNamePrefix}}Authenticator{{abstractNameSuffix}}.php) class by [\{{authPackage}}\OAuthAuthenticator](./src/Auth/OAuthAuthenticator.php) class.
+
+Scope list:
+{{#scopes}}
+* `{{scope}}`{{#description}} - {{description}}{{/description}}
+{{/scopes}}
+
+{{/isOAuth}}
+{{/authMethods}}
+### Advanced middleware configuration
+Ref to used Slim Token Middleware [dyorg/slim-token-authentication](https://github.com/dyorg/slim-token-authentication/tree/1.x#readme)
+{{/hasAuthMethods}}
diff --git a/modules/openapi-generator/src/main/resources/php-slim4-server/SlimRouter.mustache b/modules/openapi-generator/src/main/resources/php-slim4-server/SlimRouter.mustache
new file mode 100644
index 0000000000000000000000000000000000000000..d7ddf7b23847f74b0897c34ba08429f2312f170a
--- /dev/null
+++ b/modules/openapi-generator/src/main/resources/php-slim4-server/SlimRouter.mustache
@@ -0,0 +1,294 @@
+<?php
+/**
+ * SlimRouter
+ *
+ * PHP version 7.1
+ *
+ * @package {{invokerPackage}}
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+
+/**{{#apiInfo}}{{#appName}}
+ * {{{appName}}}
+ *
+ {{/appName}}
+ {{#appDescription}}
+ * {{{appDescription}}}
+ {{/appDescription}}
+ {{#version}}
+ * The version of the OpenAPI document: {{{version}}}
+ {{/version}}
+ {{#infoEmail}}
+ * Contact: {{{infoEmail}}}
+ {{/infoEmail}}
+ * Generated by: https://github.com/openapitools/openapi-generator.git
+ */
+
+/**
+ * NOTE: This class is auto generated by the openapi generator program.
+ * https://github.com/openapitools/openapi-generator
+ * Do not edit the class manually.
+ */
+namespace {{invokerPackage}};
+
+use Slim\Factory\AppFactory;
+use Slim\Interfaces\RouteInterface;
+use Psr\Container\ContainerInterface;
+use InvalidArgumentException;
+use Dyorg\TokenAuthentication;
+use Dyorg\TokenAuthentication\TokenSearch;
+use Psr\Http\Message\ServerRequestInterface;
+use {{invokerPackage}}\Middleware\JsonBodyParserMiddleware;
+use Exception;
+
+/**
+ * SlimRouter Class Doc Comment
+ *
+ * @package {{invokerPackage}}
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+class SlimRouter
+{
+
+    /** @var App instance */
+    private $slimApp;
+
+    /** @var array[] list of all api operations */
+    private $operations = [
+        {{#apis}}
+        {{#operations}}
+        {{#operation}}
+        [
+            'httpMethod' => '{{httpMethod}}',
+            'basePathWithoutHost' => '{{{basePathWithoutHost}}}',
+            'path' => '{{{path}}}',
+            'apiPackage' => '{{apiPackage}}',
+            'classname' => '{{classname}}',
+            'userClassname' => '{{userClassname}}',
+            'operationId' => '{{operationId}}',
+            'authMethods' => [
+                {{#hasAuthMethods}}
+                {{#authMethods}}
+                // {{type}} security schema named '{{name}}'
+                {{#isBasicBasic}}
+                [
+                    'type' => '{{type}}',
+                    'isBasic' => true,
+                    'isBearer' => false,
+                    'isApiKey' => false,
+                    'isOAuth' => false,
+                ],
+                {{/isBasicBasic}}
+                {{#isBasicBearer}}
+                [
+                    'type' => '{{type}}',
+                    'isBasic' => true,
+                    'isBearer' => true,
+                    'isApiKey' => false,
+                    'isOAuth' => false,
+                ],
+                {{/isBasicBearer}}
+                {{#isApiKey}}
+                [
+                    'type' => '{{type}}',
+                    'isBasic' => false,
+                    'isBearer' => false,
+                    'isApiKey' => true,
+                    'isOAuth' => false,
+                    'keyParamName' => '{{keyParamName}}',
+                    'isKeyInHeader' => {{#isKeyInHeader}}true{{/isKeyInHeader}}{{^isKeyInHeader}}false{{/isKeyInHeader}},
+                    'isKeyInQuery' => {{#isKeyInQuery}}true{{/isKeyInQuery}}{{^isKeyInQuery}}false{{/isKeyInQuery}},
+                    'isKeyInCookie' => {{#isKeyInCookie}}true{{/isKeyInCookie}}{{^isKeyInCookie}}false{{/isKeyInCookie}},
+                ],
+                {{/isApiKey}}
+                {{#isOAuth}}
+                [
+                    'type' => '{{type}}',
+                    'isBasic' => false,
+                    'isBearer' => false,
+                    'isApiKey' => false,
+                    'isOAuth' => true,
+                    'scopes' => [
+                    {{#scopes}}
+                        '{{scope}}',{{#description}} // {{description}}{{/description}}
+                    {{/scopes}}
+                    ],
+                ],
+                {{/isOAuth}}
+                {{/authMethods}}
+                {{/hasAuthMethods}}
+            ],
+        ],
+        {{/operation}}
+        {{/operations}}
+        {{/apis}}
+    ];
+
+    /**
+     * Class constructor
+     *
+     * @param ContainerInterface|array $settings Either a ContainerInterface or an associative array of app settings
+     *
+     * @throws Exception When implementation class doesn't exists
+     */
+    public function __construct($settings = [])
+    {
+        if ($settings instanceof ContainerInterface) {
+            // Set container to create App with on AppFactory
+            AppFactory::setContainer($settings);
+        }
+        $this->slimApp = AppFactory::create();
+
+        // middlewares requires Psr\Container\ContainerInterface
+        $container = $this->slimApp->getContainer();
+
+        {{#hasAuthMethods}}
+        $authPackage = '{{authPackage}}';
+        $basicAuthenticator = function (ServerRequestInterface &$request, TokenSearch $tokenSearch) use ($authPackage) {
+            $message = "How about extending {{abstractNamePrefix}}Authenticator{{abstractNameSuffix}} class by {$authPackage}\BasicAuthenticator?";
+            throw new Exception($message);
+        };
+        $apiKeyAuthenticator = function (ServerRequestInterface &$request, TokenSearch $tokenSearch) use ($authPackage) {
+            $message = "How about extending {{abstractNamePrefix}}Authenticator{{abstractNameSuffix}} class by {$authPackage}\ApiKeyAuthenticator?";
+            throw new Exception($message);
+        };
+        $oAuthAuthenticator = function (ServerRequestInterface &$request, TokenSearch $tokenSearch) use ($authPackage) {
+            $message = "How about extending {{abstractNamePrefix}}Authenticator{{abstractNameSuffix}} class by {$authPackage}\OAuthAuthenticator?";
+            throw new Exception($message);
+        };
+        {{/hasAuthMethods}}
+
+        $userOptions = null;
+        if ($settings instanceof ContainerInterface && $settings->has('tokenAuthenticationOptions')) {
+            $userOptions = $settings->get('tokenAuthenticationOptions');
+        } elseif (is_array($settings) && isset($settings['tokenAuthenticationOptions'])) {
+            $userOptions = $settings['tokenAuthenticationOptions'];
+        }
+
+        foreach ($this->operations as $operation) {
+            $callback = function ($request, $response, $arguments) use ($operation) {
+                $message = "How about extending {$operation['classname']} by {$operation['apiPackage']}\\{$operation['userClassname']} class implementing {$operation['operationId']} as a {$operation['httpMethod']} method?";
+                throw new Exception($message);
+                $response->getBody()->write($message);
+                return $response->withStatus(501);
+            };
+            $middlewares = [new JsonBodyParserMiddleware()];
+
+            if (class_exists("\\{$operation['apiPackage']}\\{$operation['userClassname']}")) {
+                $callback = "\\{$operation['apiPackage']}\\{$operation['userClassname']}:{$operation['operationId']}";
+            }
+
+            {{#hasAuthMethods}}
+            foreach ($operation['authMethods'] as $authMethod) {
+                switch ($authMethod['type']) {
+                    case 'http':
+                        $authenticatorClassname = "\\{$authPackage}\\BasicAuthenticator";
+                        if (class_exists($authenticatorClassname)) {
+                            $basicAuthenticator = new $authenticatorClassname($container);
+                        }
+
+                        $middlewares[] = new TokenAuthentication($this->getTokenAuthenticationOptions([
+                            'authenticator' => $basicAuthenticator,
+                            'regex' => $authMethod['isBearer'] ? '/Bearer\s+(.*)$/i' : '/Basic\s+(.*)$/i',
+                            'header' => 'Authorization',
+                            'parameter' => null,
+                            'cookie' => null,
+                            'argument' => null,
+                        ], $userOptions));
+                        break;
+                    case 'apiKey':
+                        $authenticatorClassname = "\\{$authPackage}\\ApiKeyAuthenticator";
+                        if (class_exists($authenticatorClassname)) {
+                            $apiKeyAuthenticator = new $authenticatorClassname($container);
+                        }
+
+                        $middlewares[] = new TokenAuthentication($this->getTokenAuthenticationOptions([
+                            'authenticator' => $apiKeyAuthenticator,
+                            'regex' => '/^(.*)$/i',
+                            'header' => $authMethod['isKeyInHeader'] ? $authMethod['keyParamName'] : null,
+                            'parameter' => $authMethod['isKeyInQuery'] ? $authMethod['keyParamName'] : null,
+                            'cookie' => $authMethod['isKeyInCookie'] ? $authMethod['keyParamName'] : null,
+                            'argument' => null,
+                        ], $userOptions));
+                        break;
+                    case 'oauth2':
+                        $authenticatorClassname = "\\{$authPackage}\\OAuthAuthenticator";
+                        if (class_exists($authenticatorClassname)) {
+                            $oAuthAuthenticator = new $authenticatorClassname($container, $authMethod['scopes']);
+                        }
+
+                        $middlewares[] = new TokenAuthentication($this->getTokenAuthenticationOptions([
+                            'authenticator' => $oAuthAuthenticator,
+                            'regex' => '/Bearer\s+(.*)$/i',
+                            'header' => 'Authorization',
+                            'parameter' => null,
+                            'cookie' => null,
+                            'argument' => null,
+                        ], $userOptions));
+                        break;
+                    default:
+                        throw new Exception('Unknown authorization schema type');
+                }
+            }
+            {{/hasAuthMethods}}
+
+            $this->addRoute(
+                [$operation['httpMethod']],
+                "{$operation['basePathWithoutHost']}{$operation['path']}",
+                $callback,
+                $middlewares
+            )->setName($operation['operationId']);
+        }
+    }
+
+    /**
+     * Merges user defined options with dynamic params
+     *
+     * @param array $staticOptions Required static options
+     * @param array $userOptions   User options
+     *
+     * @return array Merged array
+     */
+    private function getTokenAuthenticationOptions(array $staticOptions, array $userOptions = null)
+    {
+        if (is_array($userOptions) === false) {
+            return $staticOptions;
+        }
+
+        return array_merge($userOptions, $staticOptions);
+    }
+
+    /**
+     * Add route with multiple methods
+     *
+     * @param string[]        $methods     Numeric array of HTTP method names
+     * @param string          $pattern     The route URI pattern
+     * @param callable|string $callable    The route callback routine
+     * @param array|null      $middlewares List of middlewares
+     *
+     * @return RouteInterface
+     *
+     * @throws InvalidArgumentException If the route pattern isn't a string
+     */
+    public function addRoute(array $methods, string $pattern, $callable, $middlewares = [])
+    {
+        $route = $this->slimApp->map($methods, $pattern, $callable);
+        foreach ($middlewares as $middleware) {
+            $route->add($middleware);
+        }
+        return $route;
+    }
+
+    /**
+     * Returns Slim Framework instance
+     *
+     * @return App
+     */
+    public function getSlimApp()
+    {
+        return $this->slimApp;
+    }
+}
+{{/apiInfo}}
diff --git a/modules/openapi-generator/src/main/resources/php-slim4-server/abstract_authenticator.mustache b/modules/openapi-generator/src/main/resources/php-slim4-server/abstract_authenticator.mustache
new file mode 100644
index 0000000000000000000000000000000000000000..fc6f69f2ebca68bb424a792fb44f710fba0a4d10
--- /dev/null
+++ b/modules/openapi-generator/src/main/resources/php-slim4-server/abstract_authenticator.mustache
@@ -0,0 +1,117 @@
+<?php
+/**
+ * {{abstractNamePrefix}}Authenticator{{abstractNameSuffix}}
+ *
+ * PHP version 7.1
+ *
+ * @package {{invokerPackage}}
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+
+/**{{#apiInfo}}{{#appName}}
+ * {{{appName}}}
+ *
+ {{/appName}}
+ {{#appDescription}}
+ * {{{appDescription}}}
+ {{/appDescription}}
+ {{#version}}
+ * The version of the OpenAPI document: {{{version}}}
+ {{/version}}
+ {{#infoEmail}}
+ * Contact: {{{infoEmail}}}
+ {{/infoEmail}}
+ * Generated by: https://github.com/openapitools/openapi-generator.git
+ */
+
+/**
+ * NOTE: This class is auto generated by the openapi generator program.
+ * https://github.com/openapitools/openapi-generator
+ * Do not edit the class manually.
+ */
+namespace {{authPackage}};
+
+use Psr\Container\ContainerInterface;
+use Psr\Http\Message\ServerRequestInterface;
+use Dyorg\TokenAuthentication;
+use Dyorg\TokenAuthentication\TokenSearch;
+use Dyorg\TokenAuthentication\Exceptions\UnauthorizedExceptionInterface;
+
+/**
+ * {{abstractNamePrefix}}Authenticator{{abstractNameSuffix}} Class Doc Comment
+ *
+ * @package {{authPackage}}
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+abstract class {{abstractNamePrefix}}Authenticator{{abstractNameSuffix}}
+{
+
+    /**
+     * @var ContainerInterface|null Slim app container instance
+     */
+    protected $container;
+
+    /**
+     * @var string[]|null List of required scopes
+     */
+    protected $requiredScope;
+
+    /**
+     * Verify if token is valid on database
+     * If token isn't valid, expired or has insufficient scope must throw an UnauthorizedExceptionInterface
+     *
+     * @param string $token Api Key
+     *
+     * @return array User object or associative array
+     * @throws UnauthorizedExceptionInterface on invalid token
+     */
+    abstract protected function getUserByToken(string $token);
+
+    /**
+     * Authenticator constructor
+     *
+     * @param ContainerInterface|null $container     Slim app container instance
+     * @param string[]|null           $requiredScope List of required scopes
+     */
+    public function __construct(ContainerInterface $container = null, $requiredScope = null)
+    {
+        $this->container = $container;
+        $this->requiredScope = $requiredScope;
+    }
+
+    /**
+     * Makes the api key validation of your application
+     *
+     * Just an example of implementation. Override this method to fit your needs
+     *
+     * @param ServerRequestInterface $request     HTTP request
+     * @param TokenSearch            $tokenSearch Middleware instance which contains api key in token
+     *
+     * @return bool Must return either true or false
+     * @throws UnauthorizedExceptionInterface when cannot parse token
+     */
+    public function __invoke(ServerRequestInterface &$request, TokenSearch $tokenSearch)
+    {
+       /**
+        * Try find authorization token via header, parameters, cookie or attribute
+        * If token not found, return response with status 401 (unauthorized)
+        */
+        $token = $tokenSearch->getToken($request);
+
+        /**
+         * Verify if token is valid on database
+         * If token isn't valid, expired or has insufficient scope must throw an UnauthorizedExceptionInterface
+         */
+        $user = $this->getUserByToken($token);
+
+        /**
+         * Set authenticated user at attributes
+         */
+        $request = $request->withAttribute('authenticated_user', $user);
+
+        return true;
+    }
+}
+{{/apiInfo}}
diff --git a/modules/openapi-generator/src/main/resources/php-slim4-server/api.mustache b/modules/openapi-generator/src/main/resources/php-slim4-server/api.mustache
new file mode 100644
index 0000000000000000000000000000000000000000..3ed8ca75ed0c61cb703a227b5172c331b4d193ea
--- /dev/null
+++ b/modules/openapi-generator/src/main/resources/php-slim4-server/api.mustache
@@ -0,0 +1,134 @@
+<?php
+/**
+ * {{classname}}
+ *
+ * PHP version 7.1
+ *
+ * @package {{apiPackage}}
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+
+/**
+ {{#appName}}
+ * {{{appName}}}
+ *
+ {{/appName}}
+ {{#appDescription}}
+ * {{{appDescription}}}
+ {{/appDescription}}
+ {{#version}}
+ * The version of the OpenAPI document: {{{version}}}
+ {{/version}}
+ {{#infoEmail}}
+ * Contact: {{{infoEmail}}}
+ {{/infoEmail}}
+ * Generated by: https://github.com/openapitools/openapi-generator.git
+ */
+
+/**
+ * NOTE: This class is auto generated by the openapi generator program.
+ * https://github.com/openapitools/openapi-generator
+ * Do not edit the class manually.
+ */
+namespace {{apiPackage}};
+
+use Psr\Container\ContainerInterface;
+use Psr\Http\Message\ServerRequestInterface;
+use Psr\Http\Message\ResponseInterface;
+use Exception;
+
+/**
+ * {{classname}} Class Doc Comment
+ *
+ * @package {{apiPackage}}
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+abstract class {{classname}}
+{
+
+    /**
+     * @var ContainerInterface|null Slim app container instance
+     */
+    protected $container;
+
+    /**
+     * Route Controller constructor receives container
+     *
+     * @param ContainerInterface|null $container Slim app container instance
+     */
+    public function __construct(ContainerInterface $container = null)
+    {
+        $this->container = $container;
+    }
+
+    {{#operations}}
+    {{#operation}}
+
+    /**
+     * {{httpMethod}} {{operationId}}
+     {{#summary}}
+     * Summary: {{summary}}
+     {{/summary}}
+     {{#notes}}
+     * Notes: {{notes}}
+     {{/notes}}
+     {{#hasProduces}}
+     * Output-Formats: [{{#produces}}{{{mediaType}}}{{#hasMore}}, {{/hasMore}}{{/produces}}]
+     {{/hasProduces}}
+     *
+     * @param ServerRequestInterface $request  Request
+     * @param ResponseInterface      $response Response
+     * @param array|null             $args     Path arguments
+     *
+     * @return ResponseInterface
+     * @throws Exception to force implementation class to override this method
+     */
+    public function {{operationId}}(ServerRequestInterface $request, ResponseInterface $response, array $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}} = (key_exists('{{baseName}}', $queryParams)) ? $queryParams['{{baseName}}'] : null;
+        {{/queryParams}}
+        {{/hasQueryParams}}
+        {{#hasFormParams}}
+        $body = $request->getParsedBody();
+        {{#formParams}}
+        {{^isFile}}
+        ${{paramName}} = (isset($body['{{baseName}}'])) ? $body['{{baseName}}'] : null;
+        {{/isFile}}
+        {{#isFile}}
+        {{#isMultipart}}
+        ${{paramName}} = (key_exists('{{baseName}}', $request->getUploadedFiles())) ? $request->getUploadedFiles()['{{baseName}}'] : null;
+        {{/isMultipart}}
+        {{^isMultipart}}
+        ${{paramName}} = (isset($body['{{baseName}}'])) ? $body['{{baseName}}'] : null;
+        {{/isMultipart}}
+        {{/isFile}}
+        {{/formParams}}
+        {{/hasFormParams}}
+        {{#hasBodyParam}}
+        $body = $request->getParsedBody();
+        {{/hasBodyParam}}
+        $message = "How about implementing {{nickname}} as a {{httpMethod}} method in {{apiPackage}}\{{userClassname}} class?";
+        throw new Exception($message);
+
+        $response->getBody()->write($message);
+        return $response->withStatus(501);
+    }
+    {{/operation}}
+    {{/operations}}
+}
diff --git a/modules/openapi-generator/src/main/resources/php-slim4-server/api_test.mustache b/modules/openapi-generator/src/main/resources/php-slim4-server/api_test.mustache
new file mode 100644
index 0000000000000000000000000000000000000000..8fdc30affbf2c70e81eb4534ecdbc730909c8193
--- /dev/null
+++ b/modules/openapi-generator/src/main/resources/php-slim4-server/api_test.mustache
@@ -0,0 +1,92 @@
+<?php
+{{#operations}}/**
+ * {{userClassname}}Test
+ *
+ * PHP version 7.1
+ *
+ * @package {{apiPackage}}
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+
+/**
+ {{#appName}}
+ * {{{appName}}}
+ *
+ {{/appName}}
+ {{#appDescription}}
+ * {{{appDescription}}}
+ {{/appDescription}}
+ {{#version}}
+ * The version of the OpenAPI document: {{{version}}}
+ {{/version}}
+ {{#infoEmail}}
+ * Contact: {{{infoEmail}}}
+ {{/infoEmail}}
+ * Generated by: https://github.com/openapitools/openapi-generator.git
+ */
+
+/**
+ * NOTE: This class is auto generated by the openapi generator program.
+ * https://github.com/openapitools/openapi-generator
+ * Please update the test case below to test the endpoint.
+ */
+namespace {{apiPackage}};
+
+use PHPUnit\Framework\TestCase;
+use {{apiPackage}}\{{userClassname}};
+
+/**
+ * {{userClassname}}Test Class Doc Comment
+ *
+ * @package {{apiPackage}}
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ *
+ * @coversDefaultClass \{{apiPackage}}\{{userClassname}}
+ */
+class {{userClassname}}Test extends TestCase
+{
+
+    /**
+     * Setup before running any test cases
+     */
+    public static function setUpBeforeClass()
+    {
+    }
+
+    /**
+     * Setup before running each test case
+     */
+    public function setUp()
+    {
+    }
+
+    /**
+     * Clean up after running each test case
+     */
+    public function tearDown()
+    {
+    }
+
+    /**
+     * Clean up after running all test cases
+     */
+    public static function tearDownAfterClass()
+    {
+    }
+    {{#operation}}
+
+    /**
+     * Test case for {{{operationId}}}
+     *
+     * {{{summary}}}.
+     *
+     * @covers ::{{{operationId}}}
+     */
+    public function test{{operationIdCamelCase}}()
+    {
+    }
+    {{/operation}}
+}
+{{/operations}}
diff --git a/modules/openapi-generator/src/main/resources/php-slim4-server/composer.mustache b/modules/openapi-generator/src/main/resources/php-slim4-server/composer.mustache
new file mode 100644
index 0000000000000000000000000000000000000000..c3e014abd852d43c707edb289b7dac7c323e9dc4
--- /dev/null
+++ b/modules/openapi-generator/src/main/resources/php-slim4-server/composer.mustache
@@ -0,0 +1,52 @@
+{
+  "minimum-stability": "RC",
+  "repositories": [
+    {
+      "type": "github",
+      "url": "https://github.com/ybelenko/slim-token-authentication"
+    }
+  ],
+  "require": {
+    "php": "^7.1",
+    "slim/slim": "^4.0",
+    "dyorg/slim-token-authentication": "dev-slim4",
+    {{#isSlimPsr7}}
+    "slim/psr7": "^0.4.0"
+    {{/isSlimPsr7}}
+    {{#isNyholmPsr7}}
+    "nyholm/psr7": "^1.1.0",
+    "nyholm/psr7-server": "^0.3.0"
+    {{/isNyholmPsr7}}
+    {{#isGuzzlePsr7}}
+    "guzzlehttp/psr7": "^1.6.1",
+    "http-interop/http-factory-guzzle": "^1.0.0"
+    {{/isGuzzlePsr7}}
+    {{#isZendDiactoros}}
+    "zendframework/zend-diactoros": "^2.1.3"
+    {{/isZendDiactoros}}
+  },
+  "require-dev": {
+    "phpunit/phpunit": "^6.0 || ^7.0",
+    "overtrue/phplint": "^1.0",
+    "squizlabs/php_codesniffer": "^3.0"
+  },
+  "autoload": {
+    "psr-4": { "{{escapedInvokerPackage}}\\": [
+      "{{srcBasePath}}/",
+      "src/"
+    ]}
+  },
+  "autoload-dev": {
+    "psr-4": { "{{escapedInvokerPackage}}\\": "{{testBasePath}}/" }
+  },
+  "scripts": {
+    "test": [
+      "@test-apis",
+      "@test-models"
+    ],
+    "test-apis": "phpunit --testsuite Apis",
+    "test-models": "phpunit --testsuite Models",
+    "phpcs": "phpcs",
+    "phplint": "phplint ./ --exclude=vendor"
+  }
+}
diff --git a/modules/openapi-generator/src/main/resources/php-slim4-server/index.mustache b/modules/openapi-generator/src/main/resources/php-slim4-server/index.mustache
new file mode 100644
index 0000000000000000000000000000000000000000..32f5c4792ab0270a7709ab017bb2617953bb5a9d
--- /dev/null
+++ b/modules/openapi-generator/src/main/resources/php-slim4-server/index.mustache
@@ -0,0 +1,75 @@
+<?php
+{{#apiInfo}}/**
+ * {{appName}}
+ *
+ * PHP version 7.1
+ *
+ * @package {{apiPackage}}
+ * @author  OpenAPI Generator team
+ * @version {{appVersion}}
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+
+require_once __DIR__ . '/vendor/autoload.php';
+
+use {{invokerPackage}}\SlimRouter;
+{{/apiInfo}}
+
+$config = [];
+
+/**
+ * Token Middleware 1.x Options
+ * Options `header`, `regex`, `parameter`, `cookie`, `attribute`, `path`, `except`, `authenticator`
+ * are handled by SlimRouter class. These options are ignored by app and they omitted from current
+ * example.
+ * Ref: https://github.com/dyorg/slim-token-authentication/tree/1.x
+ */
+$config['tokenAuthenticationOptions'] = [
+    /**
+     * Tokens are essentially passwords. You should treat them as such and you should always
+     * use HTTPS. If the middleware detects insecure usage over HTTP it will return unathorized
+     * with a message Required HTTPS for token authentication. This rule is relaxed for requests
+     * on localhost. To allow insecure usage you must enable it manually by setting secure to
+     * false.
+     * Default: true
+     */
+    // 'secure' => true,
+
+    /**
+     * Alternatively you can list your development host to have relaxed security.
+     * Default: ['localhost', '127.0.0.1']
+     */
+    // 'relaxed' => ['localhost', '127.0.0.1'],
+
+    /**
+     * By default on ocurred a fail on authentication, is sent a response on json format with a
+     * message (`Invalid Token` or `Not found Token`) and with the token (if found), with status
+     * `401 Unauthorized`. You can customize it by setting a callable function on error option.
+     * Default: null
+     */
+    // 'error' => null,
+];
+
+$router = new SlimRouter($config);
+$app = $router->getSlimApp();
+
+/**
+ * The routing middleware should be added before the ErrorMiddleware
+ * Otherwise exceptions thrown from it will not be handled
+ */
+$app->addRoutingMiddleware();
+
+/**
+ * Add Error Handling Middleware
+ *
+ * @param bool $displayErrorDetails -> Should be set to false in production
+ * @param bool $logErrors -> Parameter is passed to the default ErrorHandler
+ * @param bool $logErrorDetails -> Display error details in error log
+ * which can be replaced by a callable of your choice.
+
+ * Note: This middleware should be added last. It will not handle any exceptions/errors
+ * for middleware added after it.
+ */
+$app->addErrorMiddleware(false, true, true);
+
+$app->run();
diff --git a/modules/openapi-generator/src/main/resources/php-slim4-server/json_body_parser_middleware.mustache b/modules/openapi-generator/src/main/resources/php-slim4-server/json_body_parser_middleware.mustache
new file mode 100644
index 0000000000000000000000000000000000000000..276dd864d8df9041b87c056dc1052be605b19785
--- /dev/null
+++ b/modules/openapi-generator/src/main/resources/php-slim4-server/json_body_parser_middleware.mustache
@@ -0,0 +1,74 @@
+<?php
+/**
+ * JsonBodyParserMiddleware
+ *
+ * PHP version 7.1
+ *
+ * @package {{invokerPackage}}
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+
+/**{{#apiInfo}}{{#appName}}
+ * {{{appName}}}
+ *
+ {{/appName}}
+ {{#appDescription}}
+ * {{{appDescription}}}
+ {{/appDescription}}
+ {{#version}}
+ * The version of the OpenAPI document: {{{version}}}
+ {{/version}}
+ {{#infoEmail}}
+ * Contact: {{{infoEmail}}}
+ {{/infoEmail}}
+ * Generated by: https://github.com/openapitools/openapi-generator.git
+ */
+
+/**
+ * NOTE: This class is auto generated by the openapi generator program.
+ * https://github.com/openapitools/openapi-generator
+ * Do not edit the class manually.
+ */
+namespace {{invokerPackage}}\Middleware;
+
+use Psr\Http\Message\ResponseInterface;
+use Psr\Http\Message\ServerRequestInterface;
+use Psr\Http\Server\MiddlewareInterface;
+use Psr\Http\Server\RequestHandlerInterface;
+
+/**
+ * JsonBodyParserMiddleware Class Doc Comment
+ *
+ * @package {{invokerPackage}}\Middleware
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+final class JsonBodyParserMiddleware implements MiddlewareInterface
+{
+
+    /**
+     * Parse incoming JSON input into a native PHP format
+     * Copied from Slim4 guide
+     * @ref https://www.slimframework.com/docs/v4/objects/request.html#the-request-body
+     *
+     * @param ServerRequestInterface  $request HTTP request
+     * @param RequestHandlerInterface $handler Request handler
+     *
+     * @return ResponseInterface HTTP response
+     */
+    public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
+    {
+        $contentType = $request->getHeaderLine('Content-Type');
+
+        if (strstr($contentType, 'application/json')) {
+            $contents = json_decode(file_get_contents('php://input'), true);
+            if (json_last_error() === JSON_ERROR_NONE) {
+                $request = $request->withParsedBody($contents);
+            }
+        }
+
+        return $handler->handle($request);
+    }
+}
+{{/apiInfo}}
diff --git a/modules/openapi-generator/src/main/resources/php-slim4-server/model.mustache b/modules/openapi-generator/src/main/resources/php-slim4-server/model.mustache
new file mode 100644
index 0000000000000000000000000000000000000000..e1b4f5119ea3eb0beba5ac609527916e7a5938b4
--- /dev/null
+++ b/modules/openapi-generator/src/main/resources/php-slim4-server/model.mustache
@@ -0,0 +1,33 @@
+<?php
+{{#models}}{{#model}}/**
+ * {{classname}}
+ *
+ * PHP version 7.1
+ *
+ * @package {{modelPackage}}
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+
+/**
+ * NOTE: This class is auto generated by the openapi generator program.
+ * https://github.com/openapitools/openapi-generator
+ */
+namespace {{modelPackage}};
+
+/**
+ * {{classname}}
+ *
+ * @package {{modelPackage}}
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+class {{classname}}
+{
+    {{#vars}}
+    
+    /** @var {{dataType}} ${{name}} {{#description}}{{description}}{{/description}}*/
+    private ${{name}};
+    {{/vars}}
+}
+{{/model}}{{/models}}
\ No newline at end of file
diff --git a/modules/openapi-generator/src/main/resources/php-slim4-server/model_test.mustache b/modules/openapi-generator/src/main/resources/php-slim4-server/model_test.mustache
new file mode 100644
index 0000000000000000000000000000000000000000..ed42fcb22fe3af7d707c753a9e5435390d483a25
--- /dev/null
+++ b/modules/openapi-generator/src/main/resources/php-slim4-server/model_test.mustache
@@ -0,0 +1,98 @@
+<?php
+{{#models}}
+{{#model}}
+/**
+ * {{classname}}Test
+ *
+ * PHP version 7.1
+ *
+ * @package {{modelPackage}}
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+
+/**
+ {{#appName}}
+ * {{{appName}}}
+ *
+ {{/appName}}
+ {{#appDescription}}
+ * {{{appDescription}}}
+ {{/appDescription}}
+ {{#version}}
+ * The version of the OpenAPI document: {{{version}}}
+ {{/version}}
+ {{#infoEmail}}
+ * Contact: {{{infoEmail}}}
+ {{/infoEmail}}
+ * Generated by: https://github.com/openapitools/openapi-generator.git
+ */
+
+/**
+ * NOTE: This class is auto generated by the openapi generator program.
+ * https://github.com/openapitools/openapi-generator
+ * Please update the test case below to test the model.
+ */
+namespace {{modelPackage}};
+
+use PHPUnit\Framework\TestCase;
+use {{modelPackage}}\{{classname}};
+
+/**
+ * {{classname}}Test Class Doc Comment
+ *
+ * @package {{modelPackage}}
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ *
+ * @coversDefaultClass \{{modelPackage}}\{{classname}}
+ */
+class {{classname}}Test extends TestCase
+{
+
+    /**
+     * Setup before running any test cases
+     */
+    public static function setUpBeforeClass()
+    {
+    }
+
+    /**
+     * Setup before running each test case
+     */
+    public function setUp()
+    {
+    }
+
+    /**
+     * Clean up after running each test case
+     */
+    public function tearDown()
+    {
+    }
+
+    /**
+     * Clean up after running all test cases
+     */
+    public static function tearDownAfterClass()
+    {
+    }
+
+    /**
+     * Test "{{classname}}"
+     */
+    public function test{{classname}}()
+    {
+        $test{{classname}} = new {{classname}}();
+    }
+{{#vars}}
+
+    /**
+     * Test attribute "{{name}}"
+     */
+    public function testProperty{{nameInCamelCase}}()
+    {
+    }
+{{/vars}}
+}
+{{/model}}{{/models}}
\ No newline at end of file
diff --git a/modules/openapi-generator/src/main/resources/php-slim4-server/phpcs.xml.mustache b/modules/openapi-generator/src/main/resources/php-slim4-server/phpcs.xml.mustache
new file mode 100644
index 0000000000000000000000000000000000000000..024e5f3371f2df48f44e06327f058303245269f8
--- /dev/null
+++ b/modules/openapi-generator/src/main/resources/php-slim4-server/phpcs.xml.mustache
@@ -0,0 +1,31 @@
+<?xml version="1.0"?>
+<ruleset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="{{appName}} Config" xsi:noNamespaceSchemaLocation="phpcs.xsd">
+    <description>PHP_CodeSniffer config for {{appName}}</description>
+
+    <!-- Path to inspected files -->
+    <file>./</file>
+
+    <!-- Don't need to inspect installed packages -->
+    <exclude-pattern>./vendor</exclude-pattern>
+
+    <!-- <basepath>     A path to strip from the front of file paths inside reports -->
+    <arg name="basepath" value="."/>
+
+    <!-- colors              Use colors in output -->
+    <arg name="colors"/>
+
+    <!-- Do not print warnings -->
+    <!-- <arg name="warning-severity" value="0"/> -->
+
+    <!-- -p    Show progress of the run -->
+    <!-- -s    Show sniff codes in all reports -->
+    <arg value="ps"/>
+
+    <!-- Include the whole PSR12 standard -->
+    <rule ref="PSR12">
+        <!-- There is no way to wrap generated comments, just disable that rule for now -->
+        <exclude name="Generic.Files.LineLength.TooLong" />
+        <!-- Codegen generates variables with underscore on purpose -->
+        <exclude name="PSR2.Classes.PropertyDeclaration.Underscore" />
+    </rule>
+</ruleset>
\ No newline at end of file
diff --git a/modules/openapi-generator/src/main/resources/php-slim4-server/phpunit.xml.mustache b/modules/openapi-generator/src/main/resources/php-slim4-server/phpunit.xml.mustache
new file mode 100644
index 0000000000000000000000000000000000000000..b8852944a12d175b7df124c677446e12e92faf9a
--- /dev/null
+++ b/modules/openapi-generator/src/main/resources/php-slim4-server/phpunit.xml.mustache
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<phpunit
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/4.8/phpunit.xsd"
+    bootstrap="./vendor/autoload.php"
+    colors="true"
+    convertErrorsToExceptions="true"
+    convertNoticesToExceptions="true"
+    convertWarningsToExceptions="true"
+    beStrictAboutTestsThatDoNotTestAnything="false"
+    stopOnFailure="false"
+>
+    <testsuites>
+        <testsuite name="Apis">
+            <directory>{{apiTestPath}}</directory>
+        </testsuite>
+        <testsuite name="Models">
+            <directory>{{modelTestPath}}</directory>
+        </testsuite>
+    </testsuites>
+    <filter>
+        <whitelist processUncoveredFilesFromWhitelist="true">
+            <directory suffix=".php">{{apiSrcPath}}</directory>
+            <directory suffix=".php">{{modelSrcPath}}</directory>
+        </whitelist>
+    </filter>
+    <php>
+        <ini name="error_reporting" value="E_ALL" />
+    </php>
+</phpunit>
diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/options/PhpSlim4ServerOptionsProvider.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/options/PhpSlim4ServerOptionsProvider.java
new file mode 100644
index 0000000000000000000000000000000000000000..23de2476689b9ff759357c362305e5d909805b8b
--- /dev/null
+++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/options/PhpSlim4ServerOptionsProvider.java
@@ -0,0 +1,69 @@
+/*
+ * Copyright 2018 OpenAPI-Generator Contributors (https://openapi-generator.tech)
+ * Copyright 2018 SmartBear Software
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.openapitools.codegen.options;
+
+import com.google.common.collect.ImmutableMap;
+import org.openapitools.codegen.CodegenConstants;
+import org.openapitools.codegen.languages.AbstractPhpCodegen;
+import org.openapitools.codegen.languages.PhpSlim4ServerCodegen;
+
+import java.util.Map;
+
+public class PhpSlim4ServerOptionsProvider implements OptionsProvider {
+    public static final String MODEL_PACKAGE_VALUE = "package";
+    public static final String API_PACKAGE_VALUE = "apiPackage";
+    public static final String VARIABLE_NAMING_CONVENTION_VALUE = "camelCase";
+    public static final String INVOKER_PACKAGE_VALUE = "OpenAPIServer";
+    public static final String PACKAGE_NAME_VALUE = "";
+    public static final String SRC_BASE_PATH_VALUE = "src";
+    public static final String ARTIFACT_VERSION_VALUE = "1.0.0";
+    public static final String SORT_PARAMS_VALUE = "false";
+    public static final String ENSURE_UNIQUE_PARAMS_VALUE = "true";
+    public static final String ALLOW_UNICODE_IDENTIFIERS_VALUE = "false";
+    public static final String PREPEND_FORM_OR_BODY_PARAMETERS_VALUE = "true";
+    public static final String PSR7_IMPLEMENTATION_VALUE = "zend-diactoros";
+
+    @Override
+    public String getLanguage() {
+        return "php-slim4";
+    }
+
+    @Override
+    public Map<String, String> createOptions() {
+        ImmutableMap.Builder<String, String> builder = new ImmutableMap.Builder<String, String>();
+        return builder.put(CodegenConstants.MODEL_PACKAGE, MODEL_PACKAGE_VALUE)
+                .put(AbstractPhpCodegen.VARIABLE_NAMING_CONVENTION, VARIABLE_NAMING_CONVENTION_VALUE)
+                .put(AbstractPhpCodegen.PACKAGE_NAME, PACKAGE_NAME_VALUE)
+                .put(AbstractPhpCodegen.SRC_BASE_PATH, SRC_BASE_PATH_VALUE)
+                .put(CodegenConstants.API_PACKAGE, API_PACKAGE_VALUE)
+                .put(CodegenConstants.INVOKER_PACKAGE, INVOKER_PACKAGE_VALUE)
+                .put(CodegenConstants.ARTIFACT_VERSION, ARTIFACT_VERSION_VALUE)
+                .put(CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG, SORT_PARAMS_VALUE)
+                .put(CodegenConstants.ENSURE_UNIQUE_PARAMS, ENSURE_UNIQUE_PARAMS_VALUE)
+                .put(CodegenConstants.ALLOW_UNICODE_IDENTIFIERS, ALLOW_UNICODE_IDENTIFIERS_VALUE)
+                .put(CodegenConstants.PREPEND_FORM_OR_BODY_PARAMETERS, PREPEND_FORM_OR_BODY_PARAMETERS_VALUE)
+                .put(PhpSlim4ServerCodegen.PSR7_IMPLEMENTATION, PSR7_IMPLEMENTATION_VALUE)
+                .build();
+    }
+
+    @Override
+    public boolean isServer() {
+        return true;
+    }
+}
+
diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/slim4/PhpSlim4ServerCodegenTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/slim4/PhpSlim4ServerCodegenTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..820ed851c01c257dd609b5907e5b425d3f5c93f9
--- /dev/null
+++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/slim4/PhpSlim4ServerCodegenTest.java
@@ -0,0 +1,89 @@
+/*
+ * Copyright 2018 OpenAPI-Generator Contributors (https://openapi-generator.tech)
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.openapitools.codegen.slim4;
+
+import org.openapitools.codegen.languages.PhpSlim4ServerCodegen;
+import org.testng.Assert;
+import org.testng.annotations.DataProvider;
+import org.testng.annotations.Test;
+
+import java.io.File;
+
+public class PhpSlim4ServerCodegenTest {
+
+    @Test
+    public void testEncodePath() {
+        final PhpSlim4ServerCodegen codegen = new PhpSlim4ServerCodegen();
+
+        Assert.assertEquals(codegen.encodePath("/ ' \" =end -- \\r\\n \\n \\r/v2 *_/ ' \" =end -- \\r\\n \\n \\r/fake"), "/%20%27%20%22%20%3Dend%20--%20%5C%5Cr%5C%5Cn%20%5C%5Cn%20%5C%5Cr/v2%20*_/%20%27%20%22%20%3Dend%20--%20%5C%5Cr%5C%5Cn%20%5C%5Cn%20%5C%5Cr/fake");
+        Assert.assertEquals(codegen.encodePath("/o\'\"briens/v2/o\'\"henry/fake"), "/o%27%22briens/v2/o%27%22henry/fake");
+        Assert.assertEquals(codegen.encodePath("/comedians/Chris D\'Elia"), "/comedians/Chris%20D%27Elia");
+        Assert.assertEquals(codegen.encodePath("/разработчики/Юрий Беленко"), "/%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%87%D0%B8%D0%BA%D0%B8/%D0%AE%D1%80%D0%B8%D0%B9%20%D0%91%D0%B5%D0%BB%D0%B5%D0%BD%D0%BA%D0%BE");
+        Assert.assertEquals(codegen.encodePath("/text with multilines \\\n\\\t\\\r"), "/text%20with%20multilines%20%5C%5C%20%5C%5C%20%5C%5C");
+        Assert.assertEquals(codegen.encodePath("/path with argument {value}"), "/path%20with%20argument%20{value}");
+
+        // few examples from Slim documentation
+        Assert.assertEquals(codegen.encodePath("/users[/{id}]"), "/users[/{id}]");
+        Assert.assertEquals(codegen.encodePath("/news[/{year}[/{month}]]"), "/news[/{year}[/{month}]]");
+        Assert.assertEquals(codegen.encodePath("/news[/{params:.*}]"), "/news[/{params:.*}]");
+        Assert.assertEquals(codegen.encodePath("/users/{id:[0-9]+}"), "/users/{id:[0-9]+}");
+
+        // from FastRoute\RouteParser\Std.php
+        Assert.assertEquals(codegen.encodePath("/user/{name}[/{id:[0-9]+}]"), "/user/{name}[/{id:[0-9]+}]");
+        Assert.assertEquals(codegen.encodePath("/fixedRoutePart/{varName}[/moreFixed/{varName2:\\d+}]"), "/fixedRoutePart/{varName}[/moreFixed/{varName2:\\d+}]");
+    }
+
+    @Test(dataProvider = "modelFileFolderProvider")
+    public void modelFileFolder(String modelPackage, String invokerPackage, String expected) {
+        final PhpSlim4ServerCodegen codegen = new PhpSlim4ServerCodegen();
+        codegen.setModelPackage(modelPackage);
+        codegen.setInvokerPackage(invokerPackage);
+
+        Assert.assertEquals(codegen.modelFileFolder(), expected);
+    }
+
+    @DataProvider(name = "modelFileFolderProvider")
+    public Object[][] modelFileFolderProvider() {
+        return new Object[][] {
+            // {modelPackage, invokerPackage, expected}
+            {"Model", "Invoker", "generated-code/slim4/lib/Model".replace('/', File.separatorChar)},
+            {"Petstore", "Petstore", "generated-code/slim4/lib".replace('/', File.separatorChar)},
+            {"Package\\SubPackage\\Model", "Package\\SubPackage", "generated-code/slim4/lib/Model".replace('/', File.separatorChar)},
+            {"Websupport\\InvoiceValidation\\Model", "Websupport\\InvoiceValidation", "generated-code/slim4/lib/Model".replace('/', File.separatorChar)},
+        };
+    }
+
+    @Test(dataProvider = "apiFileFolderProvider")
+    public void apiFileFolder(String modelPackage, String invokerPackage, String expected) {
+        final PhpSlim4ServerCodegen codegen = new PhpSlim4ServerCodegen();
+        codegen.setApiPackage(modelPackage);
+        codegen.setInvokerPackage(invokerPackage);
+
+        Assert.assertEquals(codegen.apiFileFolder(), expected);
+    }
+
+    @DataProvider(name = "apiFileFolderProvider")
+    public Object[][] apiFileFolderProvider() {
+        return new Object[][] {
+                // {apiPackage, invokerPackage, expected}
+                {"Api", "Invoker", "generated-code/slim4/lib/Api".replace('/', File.separatorChar)},
+                {"Petstore", "Petstore", "generated-code/slim4/lib".replace('/', File.separatorChar)},
+                {"Package\\SubPackage\\Api", "Package\\SubPackage", "generated-code/slim4/lib/Api".replace('/', File.separatorChar)},
+                {"Websupport\\InvoiceValidation\\Api", "Websupport\\InvoiceValidation", "generated-code/slim4/lib/Api".replace('/', File.separatorChar)},
+        };
+    }
+}
diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/slim4/PhpSlim4ServerOptionsTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/slim4/PhpSlim4ServerOptionsTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..fa45cb6fbcdceeca71ac4b777fa10cee1be9542b
--- /dev/null
+++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/slim4/PhpSlim4ServerOptionsTest.java
@@ -0,0 +1,66 @@
+/*
+ * Copyright 2018 OpenAPI-Generator Contributors (https://openapi-generator.tech)
+ * Copyright 2018 SmartBear Software
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.openapitools.codegen.slim4;
+
+import mockit.Expectations;
+import mockit.Tested;
+import org.openapitools.codegen.AbstractOptionsTest;
+import org.openapitools.codegen.CodegenConfig;
+import org.openapitools.codegen.languages.PhpSlim4ServerCodegen;
+import org.openapitools.codegen.options.PhpSlim4ServerOptionsProvider;
+
+public class PhpSlim4ServerOptionsTest extends AbstractOptionsTest {
+
+    @Tested
+    private PhpSlim4ServerCodegen clientCodegen;
+
+    public PhpSlim4ServerOptionsTest() {
+        super(new PhpSlim4ServerOptionsProvider());
+    }
+
+    @Override
+    protected CodegenConfig getCodegenConfig() {
+        return clientCodegen;
+    }
+
+    @SuppressWarnings("unused")
+    @Override
+    protected void setExpectations() {
+        new Expectations(clientCodegen) {{
+            clientCodegen.setModelPackage(PhpSlim4ServerOptionsProvider.MODEL_PACKAGE_VALUE);
+            times = 1;
+            clientCodegen.setApiPackage(PhpSlim4ServerOptionsProvider.API_PACKAGE_VALUE);
+            times = 1;
+            clientCodegen.setParameterNamingConvention(PhpSlim4ServerOptionsProvider.VARIABLE_NAMING_CONVENTION_VALUE);
+            times = 1;
+            clientCodegen.setInvokerPackage(PhpSlim4ServerOptionsProvider.INVOKER_PACKAGE_VALUE);
+            times = 1;
+            clientCodegen.setPackageName(PhpSlim4ServerOptionsProvider.PACKAGE_NAME_VALUE);
+            times = 1;
+            clientCodegen.setSrcBasePath(PhpSlim4ServerOptionsProvider.SRC_BASE_PATH_VALUE);
+            times = 1;
+            clientCodegen.setArtifactVersion(PhpSlim4ServerOptionsProvider.ARTIFACT_VERSION_VALUE);
+            times = 1;
+            clientCodegen.setSortParamsByRequiredFlag(Boolean.valueOf(PhpSlim4ServerOptionsProvider.SORT_PARAMS_VALUE));
+            times = 1;
+            clientCodegen.setPsr7Implementation(PhpSlim4ServerOptionsProvider.PSR7_IMPLEMENTATION_VALUE);
+            times = 1;
+        }};
+    }
+}
+
diff --git a/samples/server/petstore/php-slim4/.gitignore b/samples/server/petstore/php-slim4/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..db204792ea346200de00cca8f2f979744d68e7c4
--- /dev/null
+++ b/samples/server/petstore/php-slim4/.gitignore
@@ -0,0 +1,17 @@
+# ref: https://github.com/github/gitignore/blob/master/Composer.gitignore
+
+composer.phar
+/vendor/
+
+# Commit your application's lock file https://getcomposer.org/doc/01-basic-usage.md#commit-your-composer-lock-file-to-version-control
+# You may choose to ignore a library lock file http://getcomposer.org/doc/02-libraries.md#lock-file
+# composer.lock
+
+# phplint tool creates cache file which is not necessary in a codebase
+/.phplint-cache
+
+# Do not commit local PHPUnit config
+/phpunit.xml
+
+# Do not commit local PHP_CodeSniffer config
+/phpcs.xml
\ No newline at end of file
diff --git a/samples/server/petstore/php-slim4/.htaccess b/samples/server/petstore/php-slim4/.htaccess
new file mode 100644
index 0000000000000000000000000000000000000000..f6a2ceb3952b1ed2c5264752ce35cd7b700b01b3
--- /dev/null
+++ b/samples/server/petstore/php-slim4/.htaccess
@@ -0,0 +1,6 @@
+<IfModule mod_rewrite.c>
+    RewriteEngine On
+    RewriteCond %{REQUEST_FILENAME} !-f
+    RewriteCond %{REQUEST_FILENAME} !-d
+    RewriteRule ^ index.php [QSA,L]
+</IfModule>
\ No newline at end of file
diff --git a/samples/server/petstore/php-slim4/.openapi-generator-ignore b/samples/server/petstore/php-slim4/.openapi-generator-ignore
new file mode 100644
index 0000000000000000000000000000000000000000..7484ee590a3894506cf063799b885428f95a71be
--- /dev/null
+++ b/samples/server/petstore/php-slim4/.openapi-generator-ignore
@@ -0,0 +1,23 @@
+# OpenAPI Generator Ignore
+# Generated by openapi-generator https://github.com/openapitools/openapi-generator
+
+# Use this file to prevent files from being overwritten by the generator.
+# The patterns follow closely to .gitignore or .dockerignore.
+
+# As an example, the C# client generator defines ApiClient.cs.
+# You can make changes and tell OpenAPI Generator to ignore just this file by uncommenting the following line:
+#ApiClient.cs
+
+# You can match any string of characters against a directory, file or extension with a single asterisk (*):
+#foo/*/qux
+# The above matches foo/bar/qux and foo/baz/qux, but not foo/bar/baz/qux
+
+# You can recursively match patterns against a directory, file or extension with a double asterisk (**):
+#foo/**/qux
+# This matches foo/bar/qux, foo/baz/qux, and foo/bar/baz/qux
+
+# You can also negate patterns with an exclamation (!).
+# For example, you can ignore all files in a docs folder with the file extension .md:
+#docs/*.md
+# Then explicitly reverse the ignore rule for a single file:
+#!docs/README.md
diff --git a/samples/server/petstore/php-slim4/.openapi-generator/VERSION b/samples/server/petstore/php-slim4/.openapi-generator/VERSION
new file mode 100644
index 0000000000000000000000000000000000000000..c3a2c7076fa8e53a4013ca4e25941267e5c1bbed
--- /dev/null
+++ b/samples/server/petstore/php-slim4/.openapi-generator/VERSION
@@ -0,0 +1 @@
+4.2.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/server/petstore/php-slim4/README.md b/samples/server/petstore/php-slim4/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..cda41d8c57eafbe8404492d7a86c68ca77e2fc65
--- /dev/null
+++ b/samples/server/petstore/php-slim4/README.md
@@ -0,0 +1,238 @@
+# php-base - PHP Slim 4 Server library for OpenAPI Petstore
+
+* [OpenAPI Generator](https://openapi-generator.tech)
+* [Slim 4 Documentation](https://www.slimframework.com/docs/v4/)
+
+This server has been generated with [Slim PSR-7](https://github.com/slimphp/Slim-Psr7) implementation.
+
+## Requirements
+
+* Web server with URL rewriting
+* PHP 7.1 or newer
+
+This package contains `.htaccess` for Apache configuration.
+If you use another server(Nginx, HHVM, IIS, lighttpd) check out [Web Servers](https://www.slimframework.com/docs/v3/start/web-servers.html) doc.
+
+## Installation via [Composer](https://getcomposer.org/)
+
+Navigate into your project's root directory and execute the bash command shown below.
+This command downloads the Slim Framework and its third-party dependencies into your project's `vendor/` directory.
+```bash
+$ composer install
+```
+
+## Start devserver
+
+Run the following command in terminal to start localhost web server, assuming `./php-slim-server/` is public-accessible directory with `index.php` file:
+```bash
+$ php -S localhost:8888 -t php-slim-server
+```
+> **Warning** This web server was designed to aid application development.
+> It may also be useful for testing purposes or for application demonstrations that are run in controlled environments.
+> It is not intended to be a full-featured web server. It should not be used on a public network.
+
+## Tests
+
+### PHPUnit
+
+This package uses PHPUnit 6 or 7(depends from your PHP version) for unit testing.
+[Test folder](test) contains templates which you can fill with real test assertions.
+How to write tests read at [PHPUnit Manual - Chapter 2. Writing Tests for PHPUnit](https://phpunit.de/manual/6.5/en/writing-tests-for-phpunit.html).
+
+#### Run
+
+Command | Target
+---- | ----
+`$ composer test` | All tests
+`$ composer test-apis` | Apis tests
+`$ composer test-models` | Models tests
+
+#### Config
+
+Package contains fully functional config `./phpunit.xml.dist` file. Create `./phpunit.xml` in root folder to override it.
+
+Quote from [3. The Command-Line Test Runner — PHPUnit 7.4 Manual](https://phpunit.readthedocs.io/en/7.4/textui.html#command-line-options):
+
+> If phpunit.xml or phpunit.xml.dist (in that order) exist in the current working directory and --configuration is not used, the configuration will be automatically read from that file.
+
+### PHP CodeSniffer
+
+[PHP CodeSniffer Documentation](https://github.com/squizlabs/PHP_CodeSniffer/wiki). This tool helps to follow coding style and avoid common PHP coding mistakes.
+
+#### Run
+
+```bash
+$ composer phpcs
+```
+
+#### Config
+
+Package contains fully functional config `./phpcs.xml.dist` file. It checks source code against PSR-1 and PSR-2 coding standards.
+Create `./phpcs.xml` in root folder to override it. More info at [Using a Default Configuration File](https://github.com/squizlabs/PHP_CodeSniffer/wiki/Advanced-Usage#using-a-default-configuration-file)
+
+### PHPLint
+
+[PHPLint Documentation](https://github.com/overtrue/phplint). Checks PHP syntax only.
+
+#### Run
+
+```bash
+$ composer phplint
+```
+
+## Show errors
+
+Switch on option in `./index.php`:
+```diff
+/**
+ * Add Error Handling Middleware
+ *
+ * @param bool $displayErrorDetails -> Should be set to false in production
+ * @param bool $logErrors -> Parameter is passed to the default ErrorHandler
+ * @param bool $logErrorDetails -> Display error details in error log
+ * which can be replaced by a callable of your choice.
+
+ * Note: This middleware should be added last. It will not handle any exceptions/errors
+ * for middleware added after it.
+ */
+--- $app->addErrorMiddleware(false, true, true);
++++ $app->addErrorMiddleware(true, true, true);
+```
+
+## API Endpoints
+
+All URIs are relative to *http://petstore.swagger.io:80/v2*
+
+> Important! Do not modify abstract API controllers directly! Instead extend them by implementation classes like:
+
+```php
+// src/Api/PetApi.php
+
+namespace OpenAPIServer\Api;
+
+use OpenAPIServer\Api\AbstractPetApi;
+
+class PetApi extends AbstractPetApi
+{
+
+    public function addPet($request, $response, $args)
+    {
+        // your implementation of addPet method here
+    }
+}
+```
+
+Place all your implementation classes in `./src` folder accordingly.
+For instance, when abstract class located at `./lib/Api/AbstractPetApi.php` you need to create implementation class at `./src/Api/PetApi.php`.
+
+Class | Method | HTTP request | Description
+------------ | ------------- | ------------- | -------------
+*AbstractAnotherFakeApi* | **call123TestSpecialTags** | **PATCH** /another-fake/dummy | To test special tags
+*AbstractFakeApi* | **createXmlItem** | **POST** /fake/create_xml_item | creates an XmlItem
+*AbstractFakeApi* | **fakeOuterBooleanSerialize** | **POST** /fake/outer/boolean | 
+*AbstractFakeApi* | **fakeOuterCompositeSerialize** | **POST** /fake/outer/composite | 
+*AbstractFakeApi* | **fakeOuterNumberSerialize** | **POST** /fake/outer/number | 
+*AbstractFakeApi* | **fakeOuterStringSerialize** | **POST** /fake/outer/string | 
+*AbstractFakeApi* | **testBodyWithFileSchema** | **PUT** /fake/body-with-file-schema | 
+*AbstractFakeApi* | **testBodyWithQueryParams** | **PUT** /fake/body-with-query-params | 
+*AbstractFakeApi* | **testClientModel** | **PATCH** /fake | To test \"client\" model
+*AbstractFakeApi* | **testEndpointParameters** | **POST** /fake | Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트
+*AbstractFakeApi* | **testEnumParameters** | **GET** /fake | To test enum parameters
+*AbstractFakeApi* | **testGroupParameters** | **DELETE** /fake | Fake endpoint to test group parameters (optional)
+*AbstractFakeApi* | **testInlineAdditionalProperties** | **POST** /fake/inline-additionalProperties | test inline additionalProperties
+*AbstractFakeApi* | **testJsonFormData** | **GET** /fake/jsonFormData | test json serialization of form data
+*AbstractFakeApi* | **testQueryParameterCollectionFormat** | **PUT** /fake/test-query-paramters | 
+*AbstractFakeClassnameTags123Api* | **testClassname** | **PATCH** /fake_classname_test | To test class name in snake case
+*AbstractPetApi* | **addPet** | **POST** /pet | Add a new pet to the store
+*AbstractPetApi* | **findPetsByStatus** | **GET** /pet/findByStatus | Finds Pets by status
+*AbstractPetApi* | **findPetsByTags** | **GET** /pet/findByTags | Finds Pets by tags
+*AbstractPetApi* | **updatePet** | **PUT** /pet | Update an existing pet
+*AbstractPetApi* | **deletePet** | **DELETE** /pet/{petId} | Deletes a pet
+*AbstractPetApi* | **getPetById** | **GET** /pet/{petId} | Find pet by ID
+*AbstractPetApi* | **updatePetWithForm** | **POST** /pet/{petId} | Updates a pet in the store with form data
+*AbstractPetApi* | **uploadFile** | **POST** /pet/{petId}/uploadImage | uploads an image
+*AbstractPetApi* | **uploadFileWithRequiredFile** | **POST** /fake/{petId}/uploadImageWithRequiredFile | uploads an image (required)
+*AbstractStoreApi* | **getInventory** | **GET** /store/inventory | Returns pet inventories by status
+*AbstractStoreApi* | **placeOrder** | **POST** /store/order | Place an order for a pet
+*AbstractStoreApi* | **deleteOrder** | **DELETE** /store/order/{order_id} | Delete purchase order by ID
+*AbstractStoreApi* | **getOrderById** | **GET** /store/order/{order_id} | Find purchase order by ID
+*AbstractUserApi* | **createUser** | **POST** /user | Create user
+*AbstractUserApi* | **createUsersWithArrayInput** | **POST** /user/createWithArray | Creates list of users with given input array
+*AbstractUserApi* | **createUsersWithListInput** | **POST** /user/createWithList | Creates list of users with given input array
+*AbstractUserApi* | **loginUser** | **GET** /user/login | Logs user into the system
+*AbstractUserApi* | **logoutUser** | **GET** /user/logout | Logs out current logged in user session
+*AbstractUserApi* | **deleteUser** | **DELETE** /user/{username} | Delete user
+*AbstractUserApi* | **getUserByName** | **GET** /user/{username} | Get user by user name
+*AbstractUserApi* | **updateUser** | **PUT** /user/{username} | Updated user
+
+
+## Models
+
+* OpenAPIServer\Model\AdditionalPropertiesAnyType
+* OpenAPIServer\Model\AdditionalPropertiesArray
+* OpenAPIServer\Model\AdditionalPropertiesBoolean
+* OpenAPIServer\Model\AdditionalPropertiesClass
+* OpenAPIServer\Model\AdditionalPropertiesInteger
+* OpenAPIServer\Model\AdditionalPropertiesNumber
+* OpenAPIServer\Model\AdditionalPropertiesObject
+* OpenAPIServer\Model\AdditionalPropertiesString
+* OpenAPIServer\Model\Animal
+* OpenAPIServer\Model\ApiResponse
+* OpenAPIServer\Model\ArrayOfArrayOfNumberOnly
+* OpenAPIServer\Model\ArrayOfNumberOnly
+* OpenAPIServer\Model\ArrayTest
+* OpenAPIServer\Model\Capitalization
+* OpenAPIServer\Model\Cat
+* OpenAPIServer\Model\CatAllOf
+* OpenAPIServer\Model\Category
+* OpenAPIServer\Model\ClassModel
+* OpenAPIServer\Model\Client
+* OpenAPIServer\Model\Dog
+* OpenAPIServer\Model\DogAllOf
+* OpenAPIServer\Model\EnumArrays
+* OpenAPIServer\Model\EnumClass
+* OpenAPIServer\Model\EnumTest
+* OpenAPIServer\Model\File
+* OpenAPIServer\Model\FileSchemaTestClass
+* OpenAPIServer\Model\FormatTest
+* OpenAPIServer\Model\HasOnlyReadOnly
+* OpenAPIServer\Model\MapTest
+* OpenAPIServer\Model\MixedPropertiesAndAdditionalPropertiesClass
+* OpenAPIServer\Model\Model200Response
+* OpenAPIServer\Model\ModelList
+* OpenAPIServer\Model\ModelReturn
+* OpenAPIServer\Model\Name
+* OpenAPIServer\Model\NumberOnly
+* OpenAPIServer\Model\Order
+* OpenAPIServer\Model\OuterComposite
+* OpenAPIServer\Model\OuterEnum
+* OpenAPIServer\Model\Pet
+* OpenAPIServer\Model\ReadOnlyFirst
+* OpenAPIServer\Model\SpecialModelName
+* OpenAPIServer\Model\Tag
+* OpenAPIServer\Model\TypeHolderDefault
+* OpenAPIServer\Model\TypeHolderExample
+* OpenAPIServer\Model\User
+* OpenAPIServer\Model\XmlItem
+
+
+## Authentication
+
+### Security schema `api_key`
+> Important! To make ApiKey authentication work you need to extend [\OpenAPIServer\Auth\AbstractAuthenticator](./lib/Auth/AbstractAuthenticator.php) class by [\OpenAPIServer\Auth\ApiKeyAuthenticator](./src/Auth/ApiKeyAuthenticator.php) class.
+
+### Security schema `api_key_query`
+> Important! To make ApiKey authentication work you need to extend [\OpenAPIServer\Auth\AbstractAuthenticator](./lib/Auth/AbstractAuthenticator.php) class by [\OpenAPIServer\Auth\ApiKeyAuthenticator](./src/Auth/ApiKeyAuthenticator.php) class.
+
+### Security schema `http_basic_test`
+> Important! To make Basic authentication work you need to extend [\OpenAPIServer\Auth\AbstractAuthenticator](./lib/Auth/AbstractAuthenticator.php) class by [\OpenAPIServer\Auth\BasicAuthenticator](./src/Auth/BasicAuthenticator.php) class.
+
+### Security schema `petstore_auth`
+> Important! To make OAuth authentication work you need to extend [\OpenAPIServer\Auth\AbstractAuthenticator](./lib/Auth/AbstractAuthenticator.php) class by [\OpenAPIServer\Auth\OAuthAuthenticator](./src/Auth/OAuthAuthenticator.php) class.
+
+Scope list:
+* `write:pets` - modify pets in your account
+* `read:pets` - read your pets
+
+### Advanced middleware configuration
+Ref to used Slim Token Middleware [dyorg/slim-token-authentication](https://github.com/dyorg/slim-token-authentication/tree/1.x#readme)
diff --git a/samples/server/petstore/php-slim4/composer.json b/samples/server/petstore/php-slim4/composer.json
new file mode 100644
index 0000000000000000000000000000000000000000..cc3c4ef754a44a842f82d4c1bc7a107166b28788
--- /dev/null
+++ b/samples/server/petstore/php-slim4/composer.json
@@ -0,0 +1,39 @@
+{
+  "minimum-stability": "RC",
+  "repositories": [
+    {
+      "type": "github",
+      "url": "https://github.com/ybelenko/slim-token-authentication"
+    }
+  ],
+  "require": {
+    "php": "^7.1",
+    "slim/slim": "^4.0",
+    "dyorg/slim-token-authentication": "dev-slim4",
+    "slim/psr7": "^0.4.0"
+  },
+  "require-dev": {
+    "phpunit/phpunit": "^6.0 || ^7.0",
+    "overtrue/phplint": "^1.0",
+    "squizlabs/php_codesniffer": "^3.0"
+  },
+  "autoload": {
+    "psr-4": { "OpenAPIServer\\": [
+      "lib/",
+      "src/"
+    ]}
+  },
+  "autoload-dev": {
+    "psr-4": { "OpenAPIServer\\": "test/" }
+  },
+  "scripts": {
+    "test": [
+      "@test-apis",
+      "@test-models"
+    ],
+    "test-apis": "phpunit --testsuite Apis",
+    "test-models": "phpunit --testsuite Models",
+    "phpcs": "phpcs",
+    "phplint": "phplint ./ --exclude=vendor"
+  }
+}
diff --git a/samples/server/petstore/php-slim4/index.php b/samples/server/petstore/php-slim4/index.php
new file mode 100644
index 0000000000000000000000000000000000000000..6a2dfac09736da818deb766a80a46cc628d9afa3
--- /dev/null
+++ b/samples/server/petstore/php-slim4/index.php
@@ -0,0 +1,74 @@
+<?php
+/**
+ * OpenAPI Petstore
+ *
+ * PHP version 7.1
+ *
+ * @package OpenAPIServer\Api
+ * @author  OpenAPI Generator team
+ * @version 1.0.0
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+
+require_once __DIR__ . '/vendor/autoload.php';
+
+use OpenAPIServer\SlimRouter;
+
+$config = [];
+
+/**
+ * Token Middleware 1.x Options
+ * Options `header`, `regex`, `parameter`, `cookie`, `attribute`, `path`, `except`, `authenticator`
+ * are handled by SlimRouter class. These options are ignored by app and they omitted from current
+ * example.
+ * Ref: https://github.com/dyorg/slim-token-authentication/tree/1.x
+ */
+$config['tokenAuthenticationOptions'] = [
+    /**
+     * Tokens are essentially passwords. You should treat them as such and you should always
+     * use HTTPS. If the middleware detects insecure usage over HTTP it will return unathorized
+     * with a message Required HTTPS for token authentication. This rule is relaxed for requests
+     * on localhost. To allow insecure usage you must enable it manually by setting secure to
+     * false.
+     * Default: true
+     */
+    // 'secure' => true,
+
+    /**
+     * Alternatively you can list your development host to have relaxed security.
+     * Default: ['localhost', '127.0.0.1']
+     */
+    // 'relaxed' => ['localhost', '127.0.0.1'],
+
+    /**
+     * By default on ocurred a fail on authentication, is sent a response on json format with a
+     * message (`Invalid Token` or `Not found Token`) and with the token (if found), with status
+     * `401 Unauthorized`. You can customize it by setting a callable function on error option.
+     * Default: null
+     */
+    // 'error' => null,
+];
+
+$router = new SlimRouter($config);
+$app = $router->getSlimApp();
+
+/**
+ * The routing middleware should be added before the ErrorMiddleware
+ * Otherwise exceptions thrown from it will not be handled
+ */
+$app->addRoutingMiddleware();
+
+/**
+ * Add Error Handling Middleware
+ *
+ * @param bool $displayErrorDetails -> Should be set to false in production
+ * @param bool $logErrors -> Parameter is passed to the default ErrorHandler
+ * @param bool $logErrorDetails -> Display error details in error log
+ * which can be replaced by a callable of your choice.
+
+ * Note: This middleware should be added last. It will not handle any exceptions/errors
+ * for middleware added after it.
+ */
+$app->addErrorMiddleware(false, true, true);
+
+$app->run();
diff --git a/samples/server/petstore/php-slim4/lib/Api/AbstractAnotherFakeApi.php b/samples/server/petstore/php-slim4/lib/Api/AbstractAnotherFakeApi.php
new file mode 100644
index 0000000000000000000000000000000000000000..8104591966b64e20913eb34e4bcb2c81df90b9c7
--- /dev/null
+++ b/samples/server/petstore/php-slim4/lib/Api/AbstractAnotherFakeApi.php
@@ -0,0 +1,80 @@
+<?php
+/**
+ * AbstractAnotherFakeApi
+ *
+ * PHP version 7.1
+ *
+ * @package OpenAPIServer\Api
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+
+/**
+ * OpenAPI Petstore
+ *
+ * This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\
+ * The version of the OpenAPI document: 1.0.0
+ * Generated by: https://github.com/openapitools/openapi-generator.git
+ */
+
+/**
+ * NOTE: This class is auto generated by the openapi generator program.
+ * https://github.com/openapitools/openapi-generator
+ * Do not edit the class manually.
+ */
+namespace OpenAPIServer\Api;
+
+use Psr\Container\ContainerInterface;
+use Psr\Http\Message\ServerRequestInterface;
+use Psr\Http\Message\ResponseInterface;
+use Exception;
+
+/**
+ * AbstractAnotherFakeApi Class Doc Comment
+ *
+ * @package OpenAPIServer\Api
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+abstract class AbstractAnotherFakeApi
+{
+
+    /**
+     * @var ContainerInterface|null Slim app container instance
+     */
+    protected $container;
+
+    /**
+     * Route Controller constructor receives container
+     *
+     * @param ContainerInterface|null $container Slim app container instance
+     */
+    public function __construct(ContainerInterface $container = null)
+    {
+        $this->container = $container;
+    }
+
+
+    /**
+     * PATCH call123TestSpecialTags
+     * Summary: To test special tags
+     * Notes: To test special tags and operation ID starting with number
+     * Output-Formats: [application/json]
+     *
+     * @param ServerRequestInterface $request  Request
+     * @param ResponseInterface      $response Response
+     * @param array|null             $args     Path arguments
+     *
+     * @return ResponseInterface
+     * @throws Exception to force implementation class to override this method
+     */
+    public function call123TestSpecialTags(ServerRequestInterface $request, ResponseInterface $response, array $args)
+    {
+        $body = $request->getParsedBody();
+        $message = "How about implementing call123TestSpecialTags as a PATCH method in OpenAPIServer\Api\AnotherFakeApi class?";
+        throw new Exception($message);
+
+        $response->getBody()->write($message);
+        return $response->withStatus(501);
+    }
+}
diff --git a/samples/server/petstore/php-slim4/lib/Api/AbstractFakeApi.php b/samples/server/petstore/php-slim4/lib/Api/AbstractFakeApi.php
new file mode 100644
index 0000000000000000000000000000000000000000..53dbd4dad21633fe88b8905d9783104d5d789351
--- /dev/null
+++ b/samples/server/petstore/php-slim4/lib/Api/AbstractFakeApi.php
@@ -0,0 +1,400 @@
+<?php
+/**
+ * AbstractFakeApi
+ *
+ * PHP version 7.1
+ *
+ * @package OpenAPIServer\Api
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+
+/**
+ * OpenAPI Petstore
+ *
+ * This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\
+ * The version of the OpenAPI document: 1.0.0
+ * Generated by: https://github.com/openapitools/openapi-generator.git
+ */
+
+/**
+ * NOTE: This class is auto generated by the openapi generator program.
+ * https://github.com/openapitools/openapi-generator
+ * Do not edit the class manually.
+ */
+namespace OpenAPIServer\Api;
+
+use Psr\Container\ContainerInterface;
+use Psr\Http\Message\ServerRequestInterface;
+use Psr\Http\Message\ResponseInterface;
+use Exception;
+
+/**
+ * AbstractFakeApi Class Doc Comment
+ *
+ * @package OpenAPIServer\Api
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+abstract class AbstractFakeApi
+{
+
+    /**
+     * @var ContainerInterface|null Slim app container instance
+     */
+    protected $container;
+
+    /**
+     * Route Controller constructor receives container
+     *
+     * @param ContainerInterface|null $container Slim app container instance
+     */
+    public function __construct(ContainerInterface $container = null)
+    {
+        $this->container = $container;
+    }
+
+
+    /**
+     * POST createXmlItem
+     * Summary: creates an XmlItem
+     * Notes: this route creates an XmlItem
+     *
+     * @param ServerRequestInterface $request  Request
+     * @param ResponseInterface      $response Response
+     * @param array|null             $args     Path arguments
+     *
+     * @return ResponseInterface
+     * @throws Exception to force implementation class to override this method
+     */
+    public function createXmlItem(ServerRequestInterface $request, ResponseInterface $response, array $args)
+    {
+        $body = $request->getParsedBody();
+        $message = "How about implementing createXmlItem as a POST method in OpenAPIServer\Api\FakeApi class?";
+        throw new Exception($message);
+
+        $response->getBody()->write($message);
+        return $response->withStatus(501);
+    }
+
+    /**
+     * POST fakeOuterBooleanSerialize
+     * Notes: Test serialization of outer boolean types
+     * Output-Formats: [*_/_*]
+     *
+     * @param ServerRequestInterface $request  Request
+     * @param ResponseInterface      $response Response
+     * @param array|null             $args     Path arguments
+     *
+     * @return ResponseInterface
+     * @throws Exception to force implementation class to override this method
+     */
+    public function fakeOuterBooleanSerialize(ServerRequestInterface $request, ResponseInterface $response, array $args)
+    {
+        $body = $request->getParsedBody();
+        $message = "How about implementing fakeOuterBooleanSerialize as a POST method in OpenAPIServer\Api\FakeApi class?";
+        throw new Exception($message);
+
+        $response->getBody()->write($message);
+        return $response->withStatus(501);
+    }
+
+    /**
+     * POST fakeOuterCompositeSerialize
+     * Notes: Test serialization of object with outer number type
+     * Output-Formats: [*_/_*]
+     *
+     * @param ServerRequestInterface $request  Request
+     * @param ResponseInterface      $response Response
+     * @param array|null             $args     Path arguments
+     *
+     * @return ResponseInterface
+     * @throws Exception to force implementation class to override this method
+     */
+    public function fakeOuterCompositeSerialize(ServerRequestInterface $request, ResponseInterface $response, array $args)
+    {
+        $body = $request->getParsedBody();
+        $message = "How about implementing fakeOuterCompositeSerialize as a POST method in OpenAPIServer\Api\FakeApi class?";
+        throw new Exception($message);
+
+        $response->getBody()->write($message);
+        return $response->withStatus(501);
+    }
+
+    /**
+     * POST fakeOuterNumberSerialize
+     * Notes: Test serialization of outer number types
+     * Output-Formats: [*_/_*]
+     *
+     * @param ServerRequestInterface $request  Request
+     * @param ResponseInterface      $response Response
+     * @param array|null             $args     Path arguments
+     *
+     * @return ResponseInterface
+     * @throws Exception to force implementation class to override this method
+     */
+    public function fakeOuterNumberSerialize(ServerRequestInterface $request, ResponseInterface $response, array $args)
+    {
+        $body = $request->getParsedBody();
+        $message = "How about implementing fakeOuterNumberSerialize as a POST method in OpenAPIServer\Api\FakeApi class?";
+        throw new Exception($message);
+
+        $response->getBody()->write($message);
+        return $response->withStatus(501);
+    }
+
+    /**
+     * POST fakeOuterStringSerialize
+     * Notes: Test serialization of outer string types
+     * Output-Formats: [*_/_*]
+     *
+     * @param ServerRequestInterface $request  Request
+     * @param ResponseInterface      $response Response
+     * @param array|null             $args     Path arguments
+     *
+     * @return ResponseInterface
+     * @throws Exception to force implementation class to override this method
+     */
+    public function fakeOuterStringSerialize(ServerRequestInterface $request, ResponseInterface $response, array $args)
+    {
+        $body = $request->getParsedBody();
+        $message = "How about implementing fakeOuterStringSerialize as a POST method in OpenAPIServer\Api\FakeApi class?";
+        throw new Exception($message);
+
+        $response->getBody()->write($message);
+        return $response->withStatus(501);
+    }
+
+    /**
+     * PUT testBodyWithFileSchema
+     * Notes: For this test, the body for this request much reference a schema named &#x60;File&#x60;.
+     *
+     * @param ServerRequestInterface $request  Request
+     * @param ResponseInterface      $response Response
+     * @param array|null             $args     Path arguments
+     *
+     * @return ResponseInterface
+     * @throws Exception to force implementation class to override this method
+     */
+    public function testBodyWithFileSchema(ServerRequestInterface $request, ResponseInterface $response, array $args)
+    {
+        $body = $request->getParsedBody();
+        $message = "How about implementing testBodyWithFileSchema as a PUT method in OpenAPIServer\Api\FakeApi class?";
+        throw new Exception($message);
+
+        $response->getBody()->write($message);
+        return $response->withStatus(501);
+    }
+
+    /**
+     * PUT testBodyWithQueryParams
+     *
+     * @param ServerRequestInterface $request  Request
+     * @param ResponseInterface      $response Response
+     * @param array|null             $args     Path arguments
+     *
+     * @return ResponseInterface
+     * @throws Exception to force implementation class to override this method
+     */
+    public function testBodyWithQueryParams(ServerRequestInterface $request, ResponseInterface $response, array $args)
+    {
+        $queryParams = $request->getQueryParams();
+        $query = (key_exists('query', $queryParams)) ? $queryParams['query'] : null;
+        $body = $request->getParsedBody();
+        $message = "How about implementing testBodyWithQueryParams as a PUT method in OpenAPIServer\Api\FakeApi class?";
+        throw new Exception($message);
+
+        $response->getBody()->write($message);
+        return $response->withStatus(501);
+    }
+
+    /**
+     * PATCH testClientModel
+     * Summary: To test \&quot;client\&quot; model
+     * Notes: To test \&quot;client\&quot; model
+     * Output-Formats: [application/json]
+     *
+     * @param ServerRequestInterface $request  Request
+     * @param ResponseInterface      $response Response
+     * @param array|null             $args     Path arguments
+     *
+     * @return ResponseInterface
+     * @throws Exception to force implementation class to override this method
+     */
+    public function testClientModel(ServerRequestInterface $request, ResponseInterface $response, array $args)
+    {
+        $body = $request->getParsedBody();
+        $message = "How about implementing testClientModel as a PATCH method in OpenAPIServer\Api\FakeApi class?";
+        throw new Exception($message);
+
+        $response->getBody()->write($message);
+        return $response->withStatus(501);
+    }
+
+    /**
+     * POST testEndpointParameters
+     * Summary: Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트
+     * Notes: Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트
+     *
+     * @param ServerRequestInterface $request  Request
+     * @param ResponseInterface      $response Response
+     * @param array|null             $args     Path arguments
+     *
+     * @return ResponseInterface
+     * @throws Exception to force implementation class to override this method
+     */
+    public function testEndpointParameters(ServerRequestInterface $request, ResponseInterface $response, array $args)
+    {
+        $body = $request->getParsedBody();
+        $integer = (isset($body['integer'])) ? $body['integer'] : null;
+        $int32 = (isset($body['int32'])) ? $body['int32'] : null;
+        $int64 = (isset($body['int64'])) ? $body['int64'] : null;
+        $number = (isset($body['number'])) ? $body['number'] : null;
+        $float = (isset($body['float'])) ? $body['float'] : null;
+        $double = (isset($body['double'])) ? $body['double'] : null;
+        $string = (isset($body['string'])) ? $body['string'] : null;
+        $patternWithoutDelimiter = (isset($body['pattern_without_delimiter'])) ? $body['pattern_without_delimiter'] : null;
+        $byte = (isset($body['byte'])) ? $body['byte'] : null;
+        $binary = (isset($body['binary'])) ? $body['binary'] : null;
+        $date = (isset($body['date'])) ? $body['date'] : null;
+        $dateTime = (isset($body['dateTime'])) ? $body['dateTime'] : null;
+        $password = (isset($body['password'])) ? $body['password'] : null;
+        $callback = (isset($body['callback'])) ? $body['callback'] : null;
+        $message = "How about implementing testEndpointParameters as a POST method in OpenAPIServer\Api\FakeApi class?";
+        throw new Exception($message);
+
+        $response->getBody()->write($message);
+        return $response->withStatus(501);
+    }
+
+    /**
+     * GET testEnumParameters
+     * Summary: To test enum parameters
+     * Notes: To test enum parameters
+     *
+     * @param ServerRequestInterface $request  Request
+     * @param ResponseInterface      $response Response
+     * @param array|null             $args     Path arguments
+     *
+     * @return ResponseInterface
+     * @throws Exception to force implementation class to override this method
+     */
+    public function testEnumParameters(ServerRequestInterface $request, ResponseInterface $response, array $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 = (key_exists('enum_query_string_array', $queryParams)) ? $queryParams['enum_query_string_array'] : null;
+        $enumQueryString = (key_exists('enum_query_string', $queryParams)) ? $queryParams['enum_query_string'] : null;
+        $enumQueryInteger = (key_exists('enum_query_integer', $queryParams)) ? $queryParams['enum_query_integer'] : null;
+        $enumQueryDouble = (key_exists('enum_query_double', $queryParams)) ? $queryParams['enum_query_double'] : null;
+        $body = $request->getParsedBody();
+        $enumFormStringArray = (isset($body['enum_form_string_array'])) ? $body['enum_form_string_array'] : null;
+        $enumFormString = (isset($body['enum_form_string'])) ? $body['enum_form_string'] : null;
+        $message = "How about implementing testEnumParameters as a GET method in OpenAPIServer\Api\FakeApi class?";
+        throw new Exception($message);
+
+        $response->getBody()->write($message);
+        return $response->withStatus(501);
+    }
+
+    /**
+     * DELETE testGroupParameters
+     * Summary: Fake endpoint to test group parameters (optional)
+     * Notes: Fake endpoint to test group parameters (optional)
+     *
+     * @param ServerRequestInterface $request  Request
+     * @param ResponseInterface      $response Response
+     * @param array|null             $args     Path arguments
+     *
+     * @return ResponseInterface
+     * @throws Exception to force implementation class to override this method
+     */
+    public function testGroupParameters(ServerRequestInterface $request, ResponseInterface $response, array $args)
+    {
+        $headers = $request->getHeaders();
+        $requiredBooleanGroup = $request->hasHeader('required_boolean_group') ? $headers['required_boolean_group'] : null;
+        $booleanGroup = $request->hasHeader('boolean_group') ? $headers['boolean_group'] : null;
+        $queryParams = $request->getQueryParams();
+        $requiredStringGroup = (key_exists('required_string_group', $queryParams)) ? $queryParams['required_string_group'] : null;
+        $requiredInt64Group = (key_exists('required_int64_group', $queryParams)) ? $queryParams['required_int64_group'] : null;
+        $stringGroup = (key_exists('string_group', $queryParams)) ? $queryParams['string_group'] : null;
+        $int64Group = (key_exists('int64_group', $queryParams)) ? $queryParams['int64_group'] : null;
+        $message = "How about implementing testGroupParameters as a DELETE method in OpenAPIServer\Api\FakeApi class?";
+        throw new Exception($message);
+
+        $response->getBody()->write($message);
+        return $response->withStatus(501);
+    }
+
+    /**
+     * POST testInlineAdditionalProperties
+     * Summary: test inline additionalProperties
+     *
+     * @param ServerRequestInterface $request  Request
+     * @param ResponseInterface      $response Response
+     * @param array|null             $args     Path arguments
+     *
+     * @return ResponseInterface
+     * @throws Exception to force implementation class to override this method
+     */
+    public function testInlineAdditionalProperties(ServerRequestInterface $request, ResponseInterface $response, array $args)
+    {
+        $body = $request->getParsedBody();
+        $message = "How about implementing testInlineAdditionalProperties as a POST method in OpenAPIServer\Api\FakeApi class?";
+        throw new Exception($message);
+
+        $response->getBody()->write($message);
+        return $response->withStatus(501);
+    }
+
+    /**
+     * GET testJsonFormData
+     * Summary: test json serialization of form data
+     *
+     * @param ServerRequestInterface $request  Request
+     * @param ResponseInterface      $response Response
+     * @param array|null             $args     Path arguments
+     *
+     * @return ResponseInterface
+     * @throws Exception to force implementation class to override this method
+     */
+    public function testJsonFormData(ServerRequestInterface $request, ResponseInterface $response, array $args)
+    {
+        $body = $request->getParsedBody();
+        $param = (isset($body['param'])) ? $body['param'] : null;
+        $param2 = (isset($body['param2'])) ? $body['param2'] : null;
+        $message = "How about implementing testJsonFormData as a GET method in OpenAPIServer\Api\FakeApi class?";
+        throw new Exception($message);
+
+        $response->getBody()->write($message);
+        return $response->withStatus(501);
+    }
+
+    /**
+     * PUT testQueryParameterCollectionFormat
+     * Notes: To test the collection format in query parameters
+     *
+     * @param ServerRequestInterface $request  Request
+     * @param ResponseInterface      $response Response
+     * @param array|null             $args     Path arguments
+     *
+     * @return ResponseInterface
+     * @throws Exception to force implementation class to override this method
+     */
+    public function testQueryParameterCollectionFormat(ServerRequestInterface $request, ResponseInterface $response, array $args)
+    {
+        $queryParams = $request->getQueryParams();
+        $pipe = (key_exists('pipe', $queryParams)) ? $queryParams['pipe'] : null;
+        $ioutil = (key_exists('ioutil', $queryParams)) ? $queryParams['ioutil'] : null;
+        $http = (key_exists('http', $queryParams)) ? $queryParams['http'] : null;
+        $url = (key_exists('url', $queryParams)) ? $queryParams['url'] : null;
+        $context = (key_exists('context', $queryParams)) ? $queryParams['context'] : null;
+        $message = "How about implementing testQueryParameterCollectionFormat as a PUT method in OpenAPIServer\Api\FakeApi class?";
+        throw new Exception($message);
+
+        $response->getBody()->write($message);
+        return $response->withStatus(501);
+    }
+}
diff --git a/samples/server/petstore/php-slim4/lib/Api/AbstractFakeClassnameTags123Api.php b/samples/server/petstore/php-slim4/lib/Api/AbstractFakeClassnameTags123Api.php
new file mode 100644
index 0000000000000000000000000000000000000000..762829ededfac91a6e28eca46b7c4870c84903fc
--- /dev/null
+++ b/samples/server/petstore/php-slim4/lib/Api/AbstractFakeClassnameTags123Api.php
@@ -0,0 +1,80 @@
+<?php
+/**
+ * AbstractFakeClassnameTags123Api
+ *
+ * PHP version 7.1
+ *
+ * @package OpenAPIServer\Api
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+
+/**
+ * OpenAPI Petstore
+ *
+ * This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\
+ * The version of the OpenAPI document: 1.0.0
+ * Generated by: https://github.com/openapitools/openapi-generator.git
+ */
+
+/**
+ * NOTE: This class is auto generated by the openapi generator program.
+ * https://github.com/openapitools/openapi-generator
+ * Do not edit the class manually.
+ */
+namespace OpenAPIServer\Api;
+
+use Psr\Container\ContainerInterface;
+use Psr\Http\Message\ServerRequestInterface;
+use Psr\Http\Message\ResponseInterface;
+use Exception;
+
+/**
+ * AbstractFakeClassnameTags123Api Class Doc Comment
+ *
+ * @package OpenAPIServer\Api
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+abstract class AbstractFakeClassnameTags123Api
+{
+
+    /**
+     * @var ContainerInterface|null Slim app container instance
+     */
+    protected $container;
+
+    /**
+     * Route Controller constructor receives container
+     *
+     * @param ContainerInterface|null $container Slim app container instance
+     */
+    public function __construct(ContainerInterface $container = null)
+    {
+        $this->container = $container;
+    }
+
+
+    /**
+     * PATCH testClassname
+     * Summary: To test class name in snake case
+     * Notes: To test class name in snake case
+     * Output-Formats: [application/json]
+     *
+     * @param ServerRequestInterface $request  Request
+     * @param ResponseInterface      $response Response
+     * @param array|null             $args     Path arguments
+     *
+     * @return ResponseInterface
+     * @throws Exception to force implementation class to override this method
+     */
+    public function testClassname(ServerRequestInterface $request, ResponseInterface $response, array $args)
+    {
+        $body = $request->getParsedBody();
+        $message = "How about implementing testClassname as a PATCH method in OpenAPIServer\Api\FakeClassnameTags123Api class?";
+        throw new Exception($message);
+
+        $response->getBody()->write($message);
+        return $response->withStatus(501);
+    }
+}
diff --git a/samples/server/petstore/php-slim4/lib/Api/AbstractPetApi.php b/samples/server/petstore/php-slim4/lib/Api/AbstractPetApi.php
new file mode 100644
index 0000000000000000000000000000000000000000..2e641c259dd93cfecc1bda23a507285ef62faa63
--- /dev/null
+++ b/samples/server/petstore/php-slim4/lib/Api/AbstractPetApi.php
@@ -0,0 +1,267 @@
+<?php
+/**
+ * AbstractPetApi
+ *
+ * PHP version 7.1
+ *
+ * @package OpenAPIServer\Api
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+
+/**
+ * OpenAPI Petstore
+ *
+ * This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\
+ * The version of the OpenAPI document: 1.0.0
+ * Generated by: https://github.com/openapitools/openapi-generator.git
+ */
+
+/**
+ * NOTE: This class is auto generated by the openapi generator program.
+ * https://github.com/openapitools/openapi-generator
+ * Do not edit the class manually.
+ */
+namespace OpenAPIServer\Api;
+
+use Psr\Container\ContainerInterface;
+use Psr\Http\Message\ServerRequestInterface;
+use Psr\Http\Message\ResponseInterface;
+use Exception;
+
+/**
+ * AbstractPetApi Class Doc Comment
+ *
+ * @package OpenAPIServer\Api
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+abstract class AbstractPetApi
+{
+
+    /**
+     * @var ContainerInterface|null Slim app container instance
+     */
+    protected $container;
+
+    /**
+     * Route Controller constructor receives container
+     *
+     * @param ContainerInterface|null $container Slim app container instance
+     */
+    public function __construct(ContainerInterface $container = null)
+    {
+        $this->container = $container;
+    }
+
+
+    /**
+     * POST addPet
+     * Summary: Add a new pet to the store
+     *
+     * @param ServerRequestInterface $request  Request
+     * @param ResponseInterface      $response Response
+     * @param array|null             $args     Path arguments
+     *
+     * @return ResponseInterface
+     * @throws Exception to force implementation class to override this method
+     */
+    public function addPet(ServerRequestInterface $request, ResponseInterface $response, array $args)
+    {
+        $body = $request->getParsedBody();
+        $message = "How about implementing addPet as a POST method in OpenAPIServer\Api\PetApi class?";
+        throw new Exception($message);
+
+        $response->getBody()->write($message);
+        return $response->withStatus(501);
+    }
+
+    /**
+     * DELETE deletePet
+     * Summary: Deletes a pet
+     *
+     * @param ServerRequestInterface $request  Request
+     * @param ResponseInterface      $response Response
+     * @param array|null             $args     Path arguments
+     *
+     * @return ResponseInterface
+     * @throws Exception to force implementation class to override this method
+     */
+    public function deletePet(ServerRequestInterface $request, ResponseInterface $response, array $args)
+    {
+        $headers = $request->getHeaders();
+        $apiKey = $request->hasHeader('api_key') ? $headers['api_key'] : null;
+        $petId = $args['petId'];
+        $message = "How about implementing deletePet as a DELETE method in OpenAPIServer\Api\PetApi class?";
+        throw new Exception($message);
+
+        $response->getBody()->write($message);
+        return $response->withStatus(501);
+    }
+
+    /**
+     * 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 ServerRequestInterface $request  Request
+     * @param ResponseInterface      $response Response
+     * @param array|null             $args     Path arguments
+     *
+     * @return ResponseInterface
+     * @throws Exception to force implementation class to override this method
+     */
+    public function findPetsByStatus(ServerRequestInterface $request, ResponseInterface $response, array $args)
+    {
+        $queryParams = $request->getQueryParams();
+        $status = (key_exists('status', $queryParams)) ? $queryParams['status'] : null;
+        $message = "How about implementing findPetsByStatus as a GET method in OpenAPIServer\Api\PetApi class?";
+        throw new Exception($message);
+
+        $response->getBody()->write($message);
+        return $response->withStatus(501);
+    }
+
+    /**
+     * 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 ServerRequestInterface $request  Request
+     * @param ResponseInterface      $response Response
+     * @param array|null             $args     Path arguments
+     *
+     * @return ResponseInterface
+     * @throws Exception to force implementation class to override this method
+     */
+    public function findPetsByTags(ServerRequestInterface $request, ResponseInterface $response, array $args)
+    {
+        $queryParams = $request->getQueryParams();
+        $tags = (key_exists('tags', $queryParams)) ? $queryParams['tags'] : null;
+        $message = "How about implementing findPetsByTags as a GET method in OpenAPIServer\Api\PetApi class?";
+        throw new Exception($message);
+
+        $response->getBody()->write($message);
+        return $response->withStatus(501);
+    }
+
+    /**
+     * GET getPetById
+     * Summary: Find pet by ID
+     * Notes: Returns a single pet
+     * Output-Formats: [application/xml, application/json]
+     *
+     * @param ServerRequestInterface $request  Request
+     * @param ResponseInterface      $response Response
+     * @param array|null             $args     Path arguments
+     *
+     * @return ResponseInterface
+     * @throws Exception to force implementation class to override this method
+     */
+    public function getPetById(ServerRequestInterface $request, ResponseInterface $response, array $args)
+    {
+        $petId = $args['petId'];
+        $message = "How about implementing getPetById as a GET method in OpenAPIServer\Api\PetApi class?";
+        throw new Exception($message);
+
+        $response->getBody()->write($message);
+        return $response->withStatus(501);
+    }
+
+    /**
+     * PUT updatePet
+     * Summary: Update an existing pet
+     *
+     * @param ServerRequestInterface $request  Request
+     * @param ResponseInterface      $response Response
+     * @param array|null             $args     Path arguments
+     *
+     * @return ResponseInterface
+     * @throws Exception to force implementation class to override this method
+     */
+    public function updatePet(ServerRequestInterface $request, ResponseInterface $response, array $args)
+    {
+        $body = $request->getParsedBody();
+        $message = "How about implementing updatePet as a PUT method in OpenAPIServer\Api\PetApi class?";
+        throw new Exception($message);
+
+        $response->getBody()->write($message);
+        return $response->withStatus(501);
+    }
+
+    /**
+     * POST updatePetWithForm
+     * Summary: Updates a pet in the store with form data
+     *
+     * @param ServerRequestInterface $request  Request
+     * @param ResponseInterface      $response Response
+     * @param array|null             $args     Path arguments
+     *
+     * @return ResponseInterface
+     * @throws Exception to force implementation class to override this method
+     */
+    public function updatePetWithForm(ServerRequestInterface $request, ResponseInterface $response, array $args)
+    {
+        $petId = $args['petId'];
+        $body = $request->getParsedBody();
+        $name = (isset($body['name'])) ? $body['name'] : null;
+        $status = (isset($body['status'])) ? $body['status'] : null;
+        $message = "How about implementing updatePetWithForm as a POST method in OpenAPIServer\Api\PetApi class?";
+        throw new Exception($message);
+
+        $response->getBody()->write($message);
+        return $response->withStatus(501);
+    }
+
+    /**
+     * POST uploadFile
+     * Summary: uploads an image
+     * Output-Formats: [application/json]
+     *
+     * @param ServerRequestInterface $request  Request
+     * @param ResponseInterface      $response Response
+     * @param array|null             $args     Path arguments
+     *
+     * @return ResponseInterface
+     * @throws Exception to force implementation class to override this method
+     */
+    public function uploadFile(ServerRequestInterface $request, ResponseInterface $response, array $args)
+    {
+        $petId = $args['petId'];
+        $body = $request->getParsedBody();
+        $additionalMetadata = (isset($body['additionalMetadata'])) ? $body['additionalMetadata'] : null;
+        $file = (key_exists('file', $request->getUploadedFiles())) ? $request->getUploadedFiles()['file'] : null;
+        $message = "How about implementing uploadFile as a POST method in OpenAPIServer\Api\PetApi class?";
+        throw new Exception($message);
+
+        $response->getBody()->write($message);
+        return $response->withStatus(501);
+    }
+
+    /**
+     * POST uploadFileWithRequiredFile
+     * Summary: uploads an image (required)
+     * Output-Formats: [application/json]
+     *
+     * @param ServerRequestInterface $request  Request
+     * @param ResponseInterface      $response Response
+     * @param array|null             $args     Path arguments
+     *
+     * @return ResponseInterface
+     * @throws Exception to force implementation class to override this method
+     */
+    public function uploadFileWithRequiredFile(ServerRequestInterface $request, ResponseInterface $response, array $args)
+    {
+        $petId = $args['petId'];
+        $body = $request->getParsedBody();
+        $additionalMetadata = (isset($body['additionalMetadata'])) ? $body['additionalMetadata'] : null;
+        $requiredFile = (key_exists('requiredFile', $request->getUploadedFiles())) ? $request->getUploadedFiles()['requiredFile'] : null;
+        $message = "How about implementing uploadFileWithRequiredFile as a POST method in OpenAPIServer\Api\PetApi class?";
+        throw new Exception($message);
+
+        $response->getBody()->write($message);
+        return $response->withStatus(501);
+    }
+}
diff --git a/samples/server/petstore/php-slim4/lib/Api/AbstractStoreApi.php b/samples/server/petstore/php-slim4/lib/Api/AbstractStoreApi.php
new file mode 100644
index 0000000000000000000000000000000000000000..590dfc15237220ab0f5436909c06b1ca7cc72c71
--- /dev/null
+++ b/samples/server/petstore/php-slim4/lib/Api/AbstractStoreApi.php
@@ -0,0 +1,146 @@
+<?php
+/**
+ * AbstractStoreApi
+ *
+ * PHP version 7.1
+ *
+ * @package OpenAPIServer\Api
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+
+/**
+ * OpenAPI Petstore
+ *
+ * This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\
+ * The version of the OpenAPI document: 1.0.0
+ * Generated by: https://github.com/openapitools/openapi-generator.git
+ */
+
+/**
+ * NOTE: This class is auto generated by the openapi generator program.
+ * https://github.com/openapitools/openapi-generator
+ * Do not edit the class manually.
+ */
+namespace OpenAPIServer\Api;
+
+use Psr\Container\ContainerInterface;
+use Psr\Http\Message\ServerRequestInterface;
+use Psr\Http\Message\ResponseInterface;
+use Exception;
+
+/**
+ * AbstractStoreApi Class Doc Comment
+ *
+ * @package OpenAPIServer\Api
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+abstract class AbstractStoreApi
+{
+
+    /**
+     * @var ContainerInterface|null Slim app container instance
+     */
+    protected $container;
+
+    /**
+     * Route Controller constructor receives container
+     *
+     * @param ContainerInterface|null $container Slim app container instance
+     */
+    public function __construct(ContainerInterface $container = null)
+    {
+        $this->container = $container;
+    }
+
+
+    /**
+     * DELETE deleteOrder
+     * Summary: Delete purchase order by ID
+     * Notes: For valid response try integer IDs with value &lt; 1000. Anything above 1000 or nonintegers will generate API errors
+     *
+     * @param ServerRequestInterface $request  Request
+     * @param ResponseInterface      $response Response
+     * @param array|null             $args     Path arguments
+     *
+     * @return ResponseInterface
+     * @throws Exception to force implementation class to override this method
+     */
+    public function deleteOrder(ServerRequestInterface $request, ResponseInterface $response, array $args)
+    {
+        $orderId = $args['order_id'];
+        $message = "How about implementing deleteOrder as a DELETE method in OpenAPIServer\Api\StoreApi class?";
+        throw new Exception($message);
+
+        $response->getBody()->write($message);
+        return $response->withStatus(501);
+    }
+
+    /**
+     * GET getInventory
+     * Summary: Returns pet inventories by status
+     * Notes: Returns a map of status codes to quantities
+     * Output-Formats: [application/json]
+     *
+     * @param ServerRequestInterface $request  Request
+     * @param ResponseInterface      $response Response
+     * @param array|null             $args     Path arguments
+     *
+     * @return ResponseInterface
+     * @throws Exception to force implementation class to override this method
+     */
+    public function getInventory(ServerRequestInterface $request, ResponseInterface $response, array $args)
+    {
+        $message = "How about implementing getInventory as a GET method in OpenAPIServer\Api\StoreApi class?";
+        throw new Exception($message);
+
+        $response->getBody()->write($message);
+        return $response->withStatus(501);
+    }
+
+    /**
+     * GET getOrderById
+     * Summary: Find purchase order by ID
+     * Notes: For valid response try integer IDs with value &lt;&#x3D; 5 or &gt; 10. Other values will generated exceptions
+     * Output-Formats: [application/xml, application/json]
+     *
+     * @param ServerRequestInterface $request  Request
+     * @param ResponseInterface      $response Response
+     * @param array|null             $args     Path arguments
+     *
+     * @return ResponseInterface
+     * @throws Exception to force implementation class to override this method
+     */
+    public function getOrderById(ServerRequestInterface $request, ResponseInterface $response, array $args)
+    {
+        $orderId = $args['order_id'];
+        $message = "How about implementing getOrderById as a GET method in OpenAPIServer\Api\StoreApi class?";
+        throw new Exception($message);
+
+        $response->getBody()->write($message);
+        return $response->withStatus(501);
+    }
+
+    /**
+     * POST placeOrder
+     * Summary: Place an order for a pet
+     * Output-Formats: [application/xml, application/json]
+     *
+     * @param ServerRequestInterface $request  Request
+     * @param ResponseInterface      $response Response
+     * @param array|null             $args     Path arguments
+     *
+     * @return ResponseInterface
+     * @throws Exception to force implementation class to override this method
+     */
+    public function placeOrder(ServerRequestInterface $request, ResponseInterface $response, array $args)
+    {
+        $body = $request->getParsedBody();
+        $message = "How about implementing placeOrder as a POST method in OpenAPIServer\Api\StoreApi class?";
+        throw new Exception($message);
+
+        $response->getBody()->write($message);
+        return $response->withStatus(501);
+    }
+}
diff --git a/samples/server/petstore/php-slim4/lib/Api/AbstractUserApi.php b/samples/server/petstore/php-slim4/lib/Api/AbstractUserApi.php
new file mode 100644
index 0000000000000000000000000000000000000000..9e0e5e410dadcbfd013f5f950227b683e3b60c7a
--- /dev/null
+++ b/samples/server/petstore/php-slim4/lib/Api/AbstractUserApi.php
@@ -0,0 +1,232 @@
+<?php
+/**
+ * AbstractUserApi
+ *
+ * PHP version 7.1
+ *
+ * @package OpenAPIServer\Api
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+
+/**
+ * OpenAPI Petstore
+ *
+ * This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\
+ * The version of the OpenAPI document: 1.0.0
+ * Generated by: https://github.com/openapitools/openapi-generator.git
+ */
+
+/**
+ * NOTE: This class is auto generated by the openapi generator program.
+ * https://github.com/openapitools/openapi-generator
+ * Do not edit the class manually.
+ */
+namespace OpenAPIServer\Api;
+
+use Psr\Container\ContainerInterface;
+use Psr\Http\Message\ServerRequestInterface;
+use Psr\Http\Message\ResponseInterface;
+use Exception;
+
+/**
+ * AbstractUserApi Class Doc Comment
+ *
+ * @package OpenAPIServer\Api
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+abstract class AbstractUserApi
+{
+
+    /**
+     * @var ContainerInterface|null Slim app container instance
+     */
+    protected $container;
+
+    /**
+     * Route Controller constructor receives container
+     *
+     * @param ContainerInterface|null $container Slim app container instance
+     */
+    public function __construct(ContainerInterface $container = null)
+    {
+        $this->container = $container;
+    }
+
+
+    /**
+     * POST createUser
+     * Summary: Create user
+     * Notes: This can only be done by the logged in user.
+     *
+     * @param ServerRequestInterface $request  Request
+     * @param ResponseInterface      $response Response
+     * @param array|null             $args     Path arguments
+     *
+     * @return ResponseInterface
+     * @throws Exception to force implementation class to override this method
+     */
+    public function createUser(ServerRequestInterface $request, ResponseInterface $response, array $args)
+    {
+        $body = $request->getParsedBody();
+        $message = "How about implementing createUser as a POST method in OpenAPIServer\Api\UserApi class?";
+        throw new Exception($message);
+
+        $response->getBody()->write($message);
+        return $response->withStatus(501);
+    }
+
+    /**
+     * POST createUsersWithArrayInput
+     * Summary: Creates list of users with given input array
+     *
+     * @param ServerRequestInterface $request  Request
+     * @param ResponseInterface      $response Response
+     * @param array|null             $args     Path arguments
+     *
+     * @return ResponseInterface
+     * @throws Exception to force implementation class to override this method
+     */
+    public function createUsersWithArrayInput(ServerRequestInterface $request, ResponseInterface $response, array $args)
+    {
+        $body = $request->getParsedBody();
+        $message = "How about implementing createUsersWithArrayInput as a POST method in OpenAPIServer\Api\UserApi class?";
+        throw new Exception($message);
+
+        $response->getBody()->write($message);
+        return $response->withStatus(501);
+    }
+
+    /**
+     * POST createUsersWithListInput
+     * Summary: Creates list of users with given input array
+     *
+     * @param ServerRequestInterface $request  Request
+     * @param ResponseInterface      $response Response
+     * @param array|null             $args     Path arguments
+     *
+     * @return ResponseInterface
+     * @throws Exception to force implementation class to override this method
+     */
+    public function createUsersWithListInput(ServerRequestInterface $request, ResponseInterface $response, array $args)
+    {
+        $body = $request->getParsedBody();
+        $message = "How about implementing createUsersWithListInput as a POST method in OpenAPIServer\Api\UserApi class?";
+        throw new Exception($message);
+
+        $response->getBody()->write($message);
+        return $response->withStatus(501);
+    }
+
+    /**
+     * DELETE deleteUser
+     * Summary: Delete user
+     * Notes: This can only be done by the logged in user.
+     *
+     * @param ServerRequestInterface $request  Request
+     * @param ResponseInterface      $response Response
+     * @param array|null             $args     Path arguments
+     *
+     * @return ResponseInterface
+     * @throws Exception to force implementation class to override this method
+     */
+    public function deleteUser(ServerRequestInterface $request, ResponseInterface $response, array $args)
+    {
+        $username = $args['username'];
+        $message = "How about implementing deleteUser as a DELETE method in OpenAPIServer\Api\UserApi class?";
+        throw new Exception($message);
+
+        $response->getBody()->write($message);
+        return $response->withStatus(501);
+    }
+
+    /**
+     * GET getUserByName
+     * Summary: Get user by user name
+     * Output-Formats: [application/xml, application/json]
+     *
+     * @param ServerRequestInterface $request  Request
+     * @param ResponseInterface      $response Response
+     * @param array|null             $args     Path arguments
+     *
+     * @return ResponseInterface
+     * @throws Exception to force implementation class to override this method
+     */
+    public function getUserByName(ServerRequestInterface $request, ResponseInterface $response, array $args)
+    {
+        $username = $args['username'];
+        $message = "How about implementing getUserByName as a GET method in OpenAPIServer\Api\UserApi class?";
+        throw new Exception($message);
+
+        $response->getBody()->write($message);
+        return $response->withStatus(501);
+    }
+
+    /**
+     * GET loginUser
+     * Summary: Logs user into the system
+     * Output-Formats: [application/xml, application/json]
+     *
+     * @param ServerRequestInterface $request  Request
+     * @param ResponseInterface      $response Response
+     * @param array|null             $args     Path arguments
+     *
+     * @return ResponseInterface
+     * @throws Exception to force implementation class to override this method
+     */
+    public function loginUser(ServerRequestInterface $request, ResponseInterface $response, array $args)
+    {
+        $queryParams = $request->getQueryParams();
+        $username = (key_exists('username', $queryParams)) ? $queryParams['username'] : null;
+        $password = (key_exists('password', $queryParams)) ? $queryParams['password'] : null;
+        $message = "How about implementing loginUser as a GET method in OpenAPIServer\Api\UserApi class?";
+        throw new Exception($message);
+
+        $response->getBody()->write($message);
+        return $response->withStatus(501);
+    }
+
+    /**
+     * GET logoutUser
+     * Summary: Logs out current logged in user session
+     *
+     * @param ServerRequestInterface $request  Request
+     * @param ResponseInterface      $response Response
+     * @param array|null             $args     Path arguments
+     *
+     * @return ResponseInterface
+     * @throws Exception to force implementation class to override this method
+     */
+    public function logoutUser(ServerRequestInterface $request, ResponseInterface $response, array $args)
+    {
+        $message = "How about implementing logoutUser as a GET method in OpenAPIServer\Api\UserApi class?";
+        throw new Exception($message);
+
+        $response->getBody()->write($message);
+        return $response->withStatus(501);
+    }
+
+    /**
+     * PUT updateUser
+     * Summary: Updated user
+     * Notes: This can only be done by the logged in user.
+     *
+     * @param ServerRequestInterface $request  Request
+     * @param ResponseInterface      $response Response
+     * @param array|null             $args     Path arguments
+     *
+     * @return ResponseInterface
+     * @throws Exception to force implementation class to override this method
+     */
+    public function updateUser(ServerRequestInterface $request, ResponseInterface $response, array $args)
+    {
+        $username = $args['username'];
+        $body = $request->getParsedBody();
+        $message = "How about implementing updateUser as a PUT method in OpenAPIServer\Api\UserApi class?";
+        throw new Exception($message);
+
+        $response->getBody()->write($message);
+        return $response->withStatus(501);
+    }
+}
diff --git a/samples/server/petstore/php-slim4/lib/Auth/AbstractAuthenticator.php b/samples/server/petstore/php-slim4/lib/Auth/AbstractAuthenticator.php
new file mode 100644
index 0000000000000000000000000000000000000000..a7d1304f4f284ba7bac370bbe8a86d7aaadf7505
--- /dev/null
+++ b/samples/server/petstore/php-slim4/lib/Auth/AbstractAuthenticator.php
@@ -0,0 +1,108 @@
+<?php
+/**
+ * AbstractAuthenticator
+ *
+ * PHP version 7.1
+ *
+ * @package OpenAPIServer
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+
+/**
+ * OpenAPI Petstore
+ *
+ * This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\
+ * The version of the OpenAPI document: 1.0.0
+ * Generated by: https://github.com/openapitools/openapi-generator.git
+ */
+
+/**
+ * NOTE: This class is auto generated by the openapi generator program.
+ * https://github.com/openapitools/openapi-generator
+ * Do not edit the class manually.
+ */
+namespace OpenAPIServer\Auth;
+
+use Psr\Container\ContainerInterface;
+use Psr\Http\Message\ServerRequestInterface;
+use Dyorg\TokenAuthentication;
+use Dyorg\TokenAuthentication\TokenSearch;
+use Dyorg\TokenAuthentication\Exceptions\UnauthorizedExceptionInterface;
+
+/**
+ * AbstractAuthenticator Class Doc Comment
+ *
+ * @package OpenAPIServer\Auth
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+abstract class AbstractAuthenticator
+{
+
+    /**
+     * @var ContainerInterface|null Slim app container instance
+     */
+    protected $container;
+
+    /**
+     * @var string[]|null List of required scopes
+     */
+    protected $requiredScope;
+
+    /**
+     * Verify if token is valid on database
+     * If token isn't valid, expired or has insufficient scope must throw an UnauthorizedExceptionInterface
+     *
+     * @param string $token Api Key
+     *
+     * @return array User object or associative array
+     * @throws UnauthorizedExceptionInterface on invalid token
+     */
+    abstract protected function getUserByToken(string $token);
+
+    /**
+     * Authenticator constructor
+     *
+     * @param ContainerInterface|null $container     Slim app container instance
+     * @param string[]|null           $requiredScope List of required scopes
+     */
+    public function __construct(ContainerInterface $container = null, $requiredScope = null)
+    {
+        $this->container = $container;
+        $this->requiredScope = $requiredScope;
+    }
+
+    /**
+     * Makes the api key validation of your application
+     *
+     * Just an example of implementation. Override this method to fit your needs
+     *
+     * @param ServerRequestInterface $request     HTTP request
+     * @param TokenSearch            $tokenSearch Middleware instance which contains api key in token
+     *
+     * @return bool Must return either true or false
+     * @throws UnauthorizedExceptionInterface when cannot parse token
+     */
+    public function __invoke(ServerRequestInterface &$request, TokenSearch $tokenSearch)
+    {
+       /**
+        * Try find authorization token via header, parameters, cookie or attribute
+        * If token not found, return response with status 401 (unauthorized)
+        */
+        $token = $tokenSearch->getToken($request);
+
+        /**
+         * Verify if token is valid on database
+         * If token isn't valid, expired or has insufficient scope must throw an UnauthorizedExceptionInterface
+         */
+        $user = $this->getUserByToken($token);
+
+        /**
+         * Set authenticated user at attributes
+         */
+        $request = $request->withAttribute('authenticated_user', $user);
+
+        return true;
+    }
+}
diff --git a/samples/server/petstore/php-slim4/lib/Middleware/JsonBodyParserMiddleware.php b/samples/server/petstore/php-slim4/lib/Middleware/JsonBodyParserMiddleware.php
new file mode 100644
index 0000000000000000000000000000000000000000..35ef73f6bd72dd79a0071f9d88145088a6c54089
--- /dev/null
+++ b/samples/server/petstore/php-slim4/lib/Middleware/JsonBodyParserMiddleware.php
@@ -0,0 +1,65 @@
+<?php
+/**
+ * JsonBodyParserMiddleware
+ *
+ * PHP version 7.1
+ *
+ * @package OpenAPIServer
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+
+/**
+ * OpenAPI Petstore
+ *
+ * This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\
+ * The version of the OpenAPI document: 1.0.0
+ * Generated by: https://github.com/openapitools/openapi-generator.git
+ */
+
+/**
+ * NOTE: This class is auto generated by the openapi generator program.
+ * https://github.com/openapitools/openapi-generator
+ * Do not edit the class manually.
+ */
+namespace OpenAPIServer\Middleware;
+
+use Psr\Http\Message\ResponseInterface;
+use Psr\Http\Message\ServerRequestInterface;
+use Psr\Http\Server\MiddlewareInterface;
+use Psr\Http\Server\RequestHandlerInterface;
+
+/**
+ * JsonBodyParserMiddleware Class Doc Comment
+ *
+ * @package OpenAPIServer\Middleware
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+final class JsonBodyParserMiddleware implements MiddlewareInterface
+{
+
+    /**
+     * Parse incoming JSON input into a native PHP format
+     * Copied from Slim4 guide
+     * @ref https://www.slimframework.com/docs/v4/objects/request.html#the-request-body
+     *
+     * @param ServerRequestInterface  $request HTTP request
+     * @param RequestHandlerInterface $handler Request handler
+     *
+     * @return ResponseInterface HTTP response
+     */
+    public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
+    {
+        $contentType = $request->getHeaderLine('Content-Type');
+
+        if (strstr($contentType, 'application/json')) {
+            $contents = json_decode(file_get_contents('php://input'), true);
+            if (json_last_error() === JSON_ERROR_NONE) {
+                $request = $request->withParsedBody($contents);
+            }
+        }
+
+        return $handler->handle($request);
+    }
+}
diff --git a/samples/server/petstore/php-slim4/lib/Model/AdditionalPropertiesAnyType.php b/samples/server/petstore/php-slim4/lib/Model/AdditionalPropertiesAnyType.php
new file mode 100644
index 0000000000000000000000000000000000000000..c413ce6f611bded10a5b9f89f5cd807f6f58ea34
--- /dev/null
+++ b/samples/server/petstore/php-slim4/lib/Model/AdditionalPropertiesAnyType.php
@@ -0,0 +1,30 @@
+<?php
+/**
+ * AdditionalPropertiesAnyType
+ *
+ * PHP version 7.1
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+
+/**
+ * NOTE: This class is auto generated by the openapi generator program.
+ * https://github.com/openapitools/openapi-generator
+ */
+namespace OpenAPIServer\Model;
+
+/**
+ * AdditionalPropertiesAnyType
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+class AdditionalPropertiesAnyType
+{
+    
+    /** @var string $name */
+    private $name;
+}
diff --git a/samples/server/petstore/php-slim4/lib/Model/AdditionalPropertiesArray.php b/samples/server/petstore/php-slim4/lib/Model/AdditionalPropertiesArray.php
new file mode 100644
index 0000000000000000000000000000000000000000..26887b49958765e8f8fa514278bbe7ebc3e0ed17
--- /dev/null
+++ b/samples/server/petstore/php-slim4/lib/Model/AdditionalPropertiesArray.php
@@ -0,0 +1,30 @@
+<?php
+/**
+ * AdditionalPropertiesArray
+ *
+ * PHP version 7.1
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+
+/**
+ * NOTE: This class is auto generated by the openapi generator program.
+ * https://github.com/openapitools/openapi-generator
+ */
+namespace OpenAPIServer\Model;
+
+/**
+ * AdditionalPropertiesArray
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+class AdditionalPropertiesArray
+{
+    
+    /** @var string $name */
+    private $name;
+}
diff --git a/samples/server/petstore/php-slim4/lib/Model/AdditionalPropertiesBoolean.php b/samples/server/petstore/php-slim4/lib/Model/AdditionalPropertiesBoolean.php
new file mode 100644
index 0000000000000000000000000000000000000000..c1bd8164b9cd6507eab00e93ee82e9595b454916
--- /dev/null
+++ b/samples/server/petstore/php-slim4/lib/Model/AdditionalPropertiesBoolean.php
@@ -0,0 +1,30 @@
+<?php
+/**
+ * AdditionalPropertiesBoolean
+ *
+ * PHP version 7.1
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+
+/**
+ * NOTE: This class is auto generated by the openapi generator program.
+ * https://github.com/openapitools/openapi-generator
+ */
+namespace OpenAPIServer\Model;
+
+/**
+ * AdditionalPropertiesBoolean
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+class AdditionalPropertiesBoolean
+{
+    
+    /** @var string $name */
+    private $name;
+}
diff --git a/samples/server/petstore/php-slim4/lib/Model/AdditionalPropertiesClass.php b/samples/server/petstore/php-slim4/lib/Model/AdditionalPropertiesClass.php
new file mode 100644
index 0000000000000000000000000000000000000000..63797e186c461873971b084a4161dc86376763ee
--- /dev/null
+++ b/samples/server/petstore/php-slim4/lib/Model/AdditionalPropertiesClass.php
@@ -0,0 +1,60 @@
+<?php
+/**
+ * AdditionalPropertiesClass
+ *
+ * PHP version 7.1
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+
+/**
+ * NOTE: This class is auto generated by the openapi generator program.
+ * https://github.com/openapitools/openapi-generator
+ */
+namespace OpenAPIServer\Model;
+
+/**
+ * AdditionalPropertiesClass
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+class AdditionalPropertiesClass
+{
+    
+    /** @var map[string,string] $mapString */
+    private $mapString;
+    
+    /** @var map[string,float] $mapNumber */
+    private $mapNumber;
+    
+    /** @var map[string,int] $mapInteger */
+    private $mapInteger;
+    
+    /** @var map[string,bool] $mapBoolean */
+    private $mapBoolean;
+    
+    /** @var map[string,int[]] $mapArrayInteger */
+    private $mapArrayInteger;
+    
+    /** @var map[string,object[]] $mapArrayAnytype */
+    private $mapArrayAnytype;
+    
+    /** @var map[string,map[string,string]] $mapMapString */
+    private $mapMapString;
+    
+    /** @var map[string,map[string,object]] $mapMapAnytype */
+    private $mapMapAnytype;
+    
+    /** @var object $anytype1 */
+    private $anytype1;
+    
+    /** @var object $anytype2 */
+    private $anytype2;
+    
+    /** @var object $anytype3 */
+    private $anytype3;
+}
diff --git a/samples/server/petstore/php-slim4/lib/Model/AdditionalPropertiesInteger.php b/samples/server/petstore/php-slim4/lib/Model/AdditionalPropertiesInteger.php
new file mode 100644
index 0000000000000000000000000000000000000000..a0425b4259516dfd3dda776847c0f2dbc6067a6b
--- /dev/null
+++ b/samples/server/petstore/php-slim4/lib/Model/AdditionalPropertiesInteger.php
@@ -0,0 +1,30 @@
+<?php
+/**
+ * AdditionalPropertiesInteger
+ *
+ * PHP version 7.1
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+
+/**
+ * NOTE: This class is auto generated by the openapi generator program.
+ * https://github.com/openapitools/openapi-generator
+ */
+namespace OpenAPIServer\Model;
+
+/**
+ * AdditionalPropertiesInteger
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+class AdditionalPropertiesInteger
+{
+    
+    /** @var string $name */
+    private $name;
+}
diff --git a/samples/server/petstore/php-slim4/lib/Model/AdditionalPropertiesNumber.php b/samples/server/petstore/php-slim4/lib/Model/AdditionalPropertiesNumber.php
new file mode 100644
index 0000000000000000000000000000000000000000..b099727aec00e6f8cd994244099c61d780c34c92
--- /dev/null
+++ b/samples/server/petstore/php-slim4/lib/Model/AdditionalPropertiesNumber.php
@@ -0,0 +1,30 @@
+<?php
+/**
+ * AdditionalPropertiesNumber
+ *
+ * PHP version 7.1
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+
+/**
+ * NOTE: This class is auto generated by the openapi generator program.
+ * https://github.com/openapitools/openapi-generator
+ */
+namespace OpenAPIServer\Model;
+
+/**
+ * AdditionalPropertiesNumber
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+class AdditionalPropertiesNumber
+{
+    
+    /** @var string $name */
+    private $name;
+}
diff --git a/samples/server/petstore/php-slim4/lib/Model/AdditionalPropertiesObject.php b/samples/server/petstore/php-slim4/lib/Model/AdditionalPropertiesObject.php
new file mode 100644
index 0000000000000000000000000000000000000000..6781910aefaa5559315452f74f0ad4945c152031
--- /dev/null
+++ b/samples/server/petstore/php-slim4/lib/Model/AdditionalPropertiesObject.php
@@ -0,0 +1,30 @@
+<?php
+/**
+ * AdditionalPropertiesObject
+ *
+ * PHP version 7.1
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+
+/**
+ * NOTE: This class is auto generated by the openapi generator program.
+ * https://github.com/openapitools/openapi-generator
+ */
+namespace OpenAPIServer\Model;
+
+/**
+ * AdditionalPropertiesObject
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+class AdditionalPropertiesObject
+{
+    
+    /** @var string $name */
+    private $name;
+}
diff --git a/samples/server/petstore/php-slim4/lib/Model/AdditionalPropertiesString.php b/samples/server/petstore/php-slim4/lib/Model/AdditionalPropertiesString.php
new file mode 100644
index 0000000000000000000000000000000000000000..8a0a5222f87bceb06ba4a4d478f422cc490468b3
--- /dev/null
+++ b/samples/server/petstore/php-slim4/lib/Model/AdditionalPropertiesString.php
@@ -0,0 +1,30 @@
+<?php
+/**
+ * AdditionalPropertiesString
+ *
+ * PHP version 7.1
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+
+/**
+ * NOTE: This class is auto generated by the openapi generator program.
+ * https://github.com/openapitools/openapi-generator
+ */
+namespace OpenAPIServer\Model;
+
+/**
+ * AdditionalPropertiesString
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+class AdditionalPropertiesString
+{
+    
+    /** @var string $name */
+    private $name;
+}
diff --git a/samples/server/petstore/php-slim4/lib/Model/Animal.php b/samples/server/petstore/php-slim4/lib/Model/Animal.php
new file mode 100644
index 0000000000000000000000000000000000000000..403ce96b687a86ab9a58125ce02be11330e846fe
--- /dev/null
+++ b/samples/server/petstore/php-slim4/lib/Model/Animal.php
@@ -0,0 +1,33 @@
+<?php
+/**
+ * Animal
+ *
+ * PHP version 7.1
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+
+/**
+ * NOTE: This class is auto generated by the openapi generator program.
+ * https://github.com/openapitools/openapi-generator
+ */
+namespace OpenAPIServer\Model;
+
+/**
+ * Animal
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+class Animal
+{
+    
+    /** @var string $className */
+    private $className;
+    
+    /** @var string $color */
+    private $color;
+}
diff --git a/samples/server/petstore/php-slim4/lib/Model/ApiResponse.php b/samples/server/petstore/php-slim4/lib/Model/ApiResponse.php
new file mode 100644
index 0000000000000000000000000000000000000000..c9ab760824d54e209f8f661505c031e720320ac6
--- /dev/null
+++ b/samples/server/petstore/php-slim4/lib/Model/ApiResponse.php
@@ -0,0 +1,36 @@
+<?php
+/**
+ * ApiResponse
+ *
+ * PHP version 7.1
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+
+/**
+ * NOTE: This class is auto generated by the openapi generator program.
+ * https://github.com/openapitools/openapi-generator
+ */
+namespace OpenAPIServer\Model;
+
+/**
+ * ApiResponse
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+class ApiResponse
+{
+    
+    /** @var int $code */
+    private $code;
+    
+    /** @var string $type */
+    private $type;
+    
+    /** @var string $message */
+    private $message;
+}
diff --git a/samples/server/petstore/php-slim4/lib/Model/ArrayOfArrayOfNumberOnly.php b/samples/server/petstore/php-slim4/lib/Model/ArrayOfArrayOfNumberOnly.php
new file mode 100644
index 0000000000000000000000000000000000000000..63790fb2b28ca018d0a17fe1fed53187ce197382
--- /dev/null
+++ b/samples/server/petstore/php-slim4/lib/Model/ArrayOfArrayOfNumberOnly.php
@@ -0,0 +1,30 @@
+<?php
+/**
+ * ArrayOfArrayOfNumberOnly
+ *
+ * PHP version 7.1
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+
+/**
+ * NOTE: This class is auto generated by the openapi generator program.
+ * https://github.com/openapitools/openapi-generator
+ */
+namespace OpenAPIServer\Model;
+
+/**
+ * ArrayOfArrayOfNumberOnly
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+class ArrayOfArrayOfNumberOnly
+{
+    
+    /** @var float[][] $arrayArrayNumber */
+    private $arrayArrayNumber;
+}
diff --git a/samples/server/petstore/php-slim4/lib/Model/ArrayOfNumberOnly.php b/samples/server/petstore/php-slim4/lib/Model/ArrayOfNumberOnly.php
new file mode 100644
index 0000000000000000000000000000000000000000..8ab4ab8218a99b99c9b5eccc9ff75ac408384d56
--- /dev/null
+++ b/samples/server/petstore/php-slim4/lib/Model/ArrayOfNumberOnly.php
@@ -0,0 +1,30 @@
+<?php
+/**
+ * ArrayOfNumberOnly
+ *
+ * PHP version 7.1
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+
+/**
+ * NOTE: This class is auto generated by the openapi generator program.
+ * https://github.com/openapitools/openapi-generator
+ */
+namespace OpenAPIServer\Model;
+
+/**
+ * ArrayOfNumberOnly
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+class ArrayOfNumberOnly
+{
+    
+    /** @var float[] $arrayNumber */
+    private $arrayNumber;
+}
diff --git a/samples/server/petstore/php-slim4/lib/Model/ArrayTest.php b/samples/server/petstore/php-slim4/lib/Model/ArrayTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..194259f1262249da2e2a5a8f1962e47294a95e84
--- /dev/null
+++ b/samples/server/petstore/php-slim4/lib/Model/ArrayTest.php
@@ -0,0 +1,36 @@
+<?php
+/**
+ * ArrayTest
+ *
+ * PHP version 7.1
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+
+/**
+ * NOTE: This class is auto generated by the openapi generator program.
+ * https://github.com/openapitools/openapi-generator
+ */
+namespace OpenAPIServer\Model;
+
+/**
+ * ArrayTest
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+class ArrayTest
+{
+    
+    /** @var string[] $arrayOfString */
+    private $arrayOfString;
+    
+    /** @var int[][] $arrayArrayOfInteger */
+    private $arrayArrayOfInteger;
+    
+    /** @var \OpenAPIServer\Model\ReadOnlyFirst[][] $arrayArrayOfModel */
+    private $arrayArrayOfModel;
+}
diff --git a/samples/server/petstore/php-slim4/lib/Model/Capitalization.php b/samples/server/petstore/php-slim4/lib/Model/Capitalization.php
new file mode 100644
index 0000000000000000000000000000000000000000..1fba709872374bc9c870bf864d8b145a2e42cceb
--- /dev/null
+++ b/samples/server/petstore/php-slim4/lib/Model/Capitalization.php
@@ -0,0 +1,45 @@
+<?php
+/**
+ * Capitalization
+ *
+ * PHP version 7.1
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+
+/**
+ * NOTE: This class is auto generated by the openapi generator program.
+ * https://github.com/openapitools/openapi-generator
+ */
+namespace OpenAPIServer\Model;
+
+/**
+ * Capitalization
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+class Capitalization
+{
+    
+    /** @var string $smallCamel */
+    private $smallCamel;
+    
+    /** @var string $capitalCamel */
+    private $capitalCamel;
+    
+    /** @var string $smallSnake */
+    private $smallSnake;
+    
+    /** @var string $capitalSnake */
+    private $capitalSnake;
+    
+    /** @var string $sCAETHFlowPoints */
+    private $sCAETHFlowPoints;
+    
+    /** @var string $aTTNAME Name of the pet*/
+    private $aTTNAME;
+}
diff --git a/samples/server/petstore/php-slim4/lib/Model/Cat.php b/samples/server/petstore/php-slim4/lib/Model/Cat.php
new file mode 100644
index 0000000000000000000000000000000000000000..5d53f839c39a01c49407287406eb3d97878a385a
--- /dev/null
+++ b/samples/server/petstore/php-slim4/lib/Model/Cat.php
@@ -0,0 +1,36 @@
+<?php
+/**
+ * Cat
+ *
+ * PHP version 7.1
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+
+/**
+ * NOTE: This class is auto generated by the openapi generator program.
+ * https://github.com/openapitools/openapi-generator
+ */
+namespace OpenAPIServer\Model;
+
+/**
+ * Cat
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+class Cat
+{
+    
+    /** @var string $className */
+    private $className;
+    
+    /** @var string $color */
+    private $color;
+    
+    /** @var bool $declawed */
+    private $declawed;
+}
diff --git a/samples/server/petstore/php-slim4/lib/Model/CatAllOf.php b/samples/server/petstore/php-slim4/lib/Model/CatAllOf.php
new file mode 100644
index 0000000000000000000000000000000000000000..3ff66c482b69bc0af0b56861cea4ab539e915a2e
--- /dev/null
+++ b/samples/server/petstore/php-slim4/lib/Model/CatAllOf.php
@@ -0,0 +1,30 @@
+<?php
+/**
+ * CatAllOf
+ *
+ * PHP version 7.1
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+
+/**
+ * NOTE: This class is auto generated by the openapi generator program.
+ * https://github.com/openapitools/openapi-generator
+ */
+namespace OpenAPIServer\Model;
+
+/**
+ * CatAllOf
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+class CatAllOf
+{
+    
+    /** @var bool $declawed */
+    private $declawed;
+}
diff --git a/samples/server/petstore/php-slim4/lib/Model/Category.php b/samples/server/petstore/php-slim4/lib/Model/Category.php
new file mode 100644
index 0000000000000000000000000000000000000000..9def34d9e735f346b7e3a7d40668b920d6258148
--- /dev/null
+++ b/samples/server/petstore/php-slim4/lib/Model/Category.php
@@ -0,0 +1,33 @@
+<?php
+/**
+ * Category
+ *
+ * PHP version 7.1
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+
+/**
+ * NOTE: This class is auto generated by the openapi generator program.
+ * https://github.com/openapitools/openapi-generator
+ */
+namespace OpenAPIServer\Model;
+
+/**
+ * Category
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+class Category
+{
+    
+    /** @var int $id */
+    private $id;
+    
+    /** @var string $name */
+    private $name;
+}
diff --git a/samples/server/petstore/php-slim4/lib/Model/ClassModel.php b/samples/server/petstore/php-slim4/lib/Model/ClassModel.php
new file mode 100644
index 0000000000000000000000000000000000000000..94af1e75d3b92960aed747ece3b463a241d4be89
--- /dev/null
+++ b/samples/server/petstore/php-slim4/lib/Model/ClassModel.php
@@ -0,0 +1,30 @@
+<?php
+/**
+ * ClassModel
+ *
+ * PHP version 7.1
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+
+/**
+ * NOTE: This class is auto generated by the openapi generator program.
+ * https://github.com/openapitools/openapi-generator
+ */
+namespace OpenAPIServer\Model;
+
+/**
+ * ClassModel
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+class ClassModel
+{
+    
+    /** @var string $class */
+    private $class;
+}
diff --git a/samples/server/petstore/php-slim4/lib/Model/Client.php b/samples/server/petstore/php-slim4/lib/Model/Client.php
new file mode 100644
index 0000000000000000000000000000000000000000..91abee859119b28c040b4a45d63020460eab3859
--- /dev/null
+++ b/samples/server/petstore/php-slim4/lib/Model/Client.php
@@ -0,0 +1,30 @@
+<?php
+/**
+ * Client
+ *
+ * PHP version 7.1
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+
+/**
+ * NOTE: This class is auto generated by the openapi generator program.
+ * https://github.com/openapitools/openapi-generator
+ */
+namespace OpenAPIServer\Model;
+
+/**
+ * Client
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+class Client
+{
+    
+    /** @var string $client */
+    private $client;
+}
diff --git a/samples/server/petstore/php-slim4/lib/Model/Dog.php b/samples/server/petstore/php-slim4/lib/Model/Dog.php
new file mode 100644
index 0000000000000000000000000000000000000000..590c0be8e3f1c085ccfa0f3c4f447db5aac4a6e6
--- /dev/null
+++ b/samples/server/petstore/php-slim4/lib/Model/Dog.php
@@ -0,0 +1,36 @@
+<?php
+/**
+ * Dog
+ *
+ * PHP version 7.1
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+
+/**
+ * NOTE: This class is auto generated by the openapi generator program.
+ * https://github.com/openapitools/openapi-generator
+ */
+namespace OpenAPIServer\Model;
+
+/**
+ * Dog
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+class Dog
+{
+    
+    /** @var string $className */
+    private $className;
+    
+    /** @var string $color */
+    private $color;
+    
+    /** @var string $breed */
+    private $breed;
+}
diff --git a/samples/server/petstore/php-slim4/lib/Model/DogAllOf.php b/samples/server/petstore/php-slim4/lib/Model/DogAllOf.php
new file mode 100644
index 0000000000000000000000000000000000000000..65b3378241a0196f47bcf726f0b5bfa55ab06f87
--- /dev/null
+++ b/samples/server/petstore/php-slim4/lib/Model/DogAllOf.php
@@ -0,0 +1,30 @@
+<?php
+/**
+ * DogAllOf
+ *
+ * PHP version 7.1
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+
+/**
+ * NOTE: This class is auto generated by the openapi generator program.
+ * https://github.com/openapitools/openapi-generator
+ */
+namespace OpenAPIServer\Model;
+
+/**
+ * DogAllOf
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+class DogAllOf
+{
+    
+    /** @var string $breed */
+    private $breed;
+}
diff --git a/samples/server/petstore/php-slim4/lib/Model/EnumArrays.php b/samples/server/petstore/php-slim4/lib/Model/EnumArrays.php
new file mode 100644
index 0000000000000000000000000000000000000000..1fba920d77cf8379fe684cf2d893bdd47a9ab026
--- /dev/null
+++ b/samples/server/petstore/php-slim4/lib/Model/EnumArrays.php
@@ -0,0 +1,33 @@
+<?php
+/**
+ * EnumArrays
+ *
+ * PHP version 7.1
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+
+/**
+ * NOTE: This class is auto generated by the openapi generator program.
+ * https://github.com/openapitools/openapi-generator
+ */
+namespace OpenAPIServer\Model;
+
+/**
+ * EnumArrays
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+class EnumArrays
+{
+    
+    /** @var string $justSymbol */
+    private $justSymbol;
+    
+    /** @var string[] $arrayEnum */
+    private $arrayEnum;
+}
diff --git a/samples/server/petstore/php-slim4/lib/Model/EnumClass.php b/samples/server/petstore/php-slim4/lib/Model/EnumClass.php
new file mode 100644
index 0000000000000000000000000000000000000000..758568e7a6c6c73772ad3fa57b616823544431ed
--- /dev/null
+++ b/samples/server/petstore/php-slim4/lib/Model/EnumClass.php
@@ -0,0 +1,27 @@
+<?php
+/**
+ * EnumClass
+ *
+ * PHP version 7.1
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+
+/**
+ * NOTE: This class is auto generated by the openapi generator program.
+ * https://github.com/openapitools/openapi-generator
+ */
+namespace OpenAPIServer\Model;
+
+/**
+ * EnumClass
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+class EnumClass
+{
+}
diff --git a/samples/server/petstore/php-slim4/lib/Model/EnumTest.php b/samples/server/petstore/php-slim4/lib/Model/EnumTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..b96d000cee9b7df76404ee4ac765760e48245b2f
--- /dev/null
+++ b/samples/server/petstore/php-slim4/lib/Model/EnumTest.php
@@ -0,0 +1,42 @@
+<?php
+/**
+ * EnumTest
+ *
+ * PHP version 7.1
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+
+/**
+ * NOTE: This class is auto generated by the openapi generator program.
+ * https://github.com/openapitools/openapi-generator
+ */
+namespace OpenAPIServer\Model;
+
+/**
+ * EnumTest
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+class EnumTest
+{
+    
+    /** @var string $enumString */
+    private $enumString;
+    
+    /** @var string $enumStringRequired */
+    private $enumStringRequired;
+    
+    /** @var int $enumInteger */
+    private $enumInteger;
+    
+    /** @var double $enumNumber */
+    private $enumNumber;
+    
+    /** @var \OpenAPIServer\Model\OuterEnum $outerEnum */
+    private $outerEnum;
+}
diff --git a/samples/server/petstore/php-slim4/lib/Model/File.php b/samples/server/petstore/php-slim4/lib/Model/File.php
new file mode 100644
index 0000000000000000000000000000000000000000..e6d09a48a99f3d0ec3086609f23560f6aee3c039
--- /dev/null
+++ b/samples/server/petstore/php-slim4/lib/Model/File.php
@@ -0,0 +1,30 @@
+<?php
+/**
+ * File
+ *
+ * PHP version 7.1
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+
+/**
+ * NOTE: This class is auto generated by the openapi generator program.
+ * https://github.com/openapitools/openapi-generator
+ */
+namespace OpenAPIServer\Model;
+
+/**
+ * File
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+class File
+{
+    
+    /** @var string $sourceURI Test capitalization*/
+    private $sourceURI;
+}
diff --git a/samples/server/petstore/php-slim4/lib/Model/FileSchemaTestClass.php b/samples/server/petstore/php-slim4/lib/Model/FileSchemaTestClass.php
new file mode 100644
index 0000000000000000000000000000000000000000..acc55a314efad6fc558e7dc525151d748b6f4060
--- /dev/null
+++ b/samples/server/petstore/php-slim4/lib/Model/FileSchemaTestClass.php
@@ -0,0 +1,33 @@
+<?php
+/**
+ * FileSchemaTestClass
+ *
+ * PHP version 7.1
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+
+/**
+ * NOTE: This class is auto generated by the openapi generator program.
+ * https://github.com/openapitools/openapi-generator
+ */
+namespace OpenAPIServer\Model;
+
+/**
+ * FileSchemaTestClass
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+class FileSchemaTestClass
+{
+    
+    /** @var \OpenAPIServer\Model\File $file */
+    private $file;
+    
+    /** @var \OpenAPIServer\Model\File[] $files */
+    private $files;
+}
diff --git a/samples/server/petstore/php-slim4/lib/Model/FormatTest.php b/samples/server/petstore/php-slim4/lib/Model/FormatTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..0acdea3d1eaa0c9c857da64c3e9a90a61d17edc8
--- /dev/null
+++ b/samples/server/petstore/php-slim4/lib/Model/FormatTest.php
@@ -0,0 +1,69 @@
+<?php
+/**
+ * FormatTest
+ *
+ * PHP version 7.1
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+
+/**
+ * NOTE: This class is auto generated by the openapi generator program.
+ * https://github.com/openapitools/openapi-generator
+ */
+namespace OpenAPIServer\Model;
+
+/**
+ * FormatTest
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+class FormatTest
+{
+    
+    /** @var int $integer */
+    private $integer;
+    
+    /** @var int $int32 */
+    private $int32;
+    
+    /** @var int $int64 */
+    private $int64;
+    
+    /** @var float $number */
+    private $number;
+    
+    /** @var float $float */
+    private $float;
+    
+    /** @var double $double */
+    private $double;
+    
+    /** @var string $string */
+    private $string;
+    
+    /** @var string $byte */
+    private $byte;
+    
+    /** @var \SplFileObject $binary */
+    private $binary;
+    
+    /** @var \DateTime $date */
+    private $date;
+    
+    /** @var \DateTime $dateTime */
+    private $dateTime;
+    
+    /** @var string $uuid */
+    private $uuid;
+    
+    /** @var string $password */
+    private $password;
+    
+    /** @var BigDecimal $bigDecimal */
+    private $bigDecimal;
+}
diff --git a/samples/server/petstore/php-slim4/lib/Model/HasOnlyReadOnly.php b/samples/server/petstore/php-slim4/lib/Model/HasOnlyReadOnly.php
new file mode 100644
index 0000000000000000000000000000000000000000..ea3ade88dac90c2704d40894b3ae4146996baabf
--- /dev/null
+++ b/samples/server/petstore/php-slim4/lib/Model/HasOnlyReadOnly.php
@@ -0,0 +1,33 @@
+<?php
+/**
+ * HasOnlyReadOnly
+ *
+ * PHP version 7.1
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+
+/**
+ * NOTE: This class is auto generated by the openapi generator program.
+ * https://github.com/openapitools/openapi-generator
+ */
+namespace OpenAPIServer\Model;
+
+/**
+ * HasOnlyReadOnly
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+class HasOnlyReadOnly
+{
+    
+    /** @var string $bar */
+    private $bar;
+    
+    /** @var string $foo */
+    private $foo;
+}
diff --git a/samples/server/petstore/php-slim4/lib/Model/MapTest.php b/samples/server/petstore/php-slim4/lib/Model/MapTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..5741d8cc05cfffc00a3234fb48c947db94c36e1d
--- /dev/null
+++ b/samples/server/petstore/php-slim4/lib/Model/MapTest.php
@@ -0,0 +1,39 @@
+<?php
+/**
+ * MapTest
+ *
+ * PHP version 7.1
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+
+/**
+ * NOTE: This class is auto generated by the openapi generator program.
+ * https://github.com/openapitools/openapi-generator
+ */
+namespace OpenAPIServer\Model;
+
+/**
+ * MapTest
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+class MapTest
+{
+    
+    /** @var map[string,map[string,string]] $mapMapOfString */
+    private $mapMapOfString;
+    
+    /** @var map[string,string] $mapOfEnumString */
+    private $mapOfEnumString;
+    
+    /** @var map[string,bool] $directMap */
+    private $directMap;
+    
+    /** @var map[string,bool] $indirectMap */
+    private $indirectMap;
+}
diff --git a/samples/server/petstore/php-slim4/lib/Model/MixedPropertiesAndAdditionalPropertiesClass.php b/samples/server/petstore/php-slim4/lib/Model/MixedPropertiesAndAdditionalPropertiesClass.php
new file mode 100644
index 0000000000000000000000000000000000000000..ef4ed555110366052f90448d6ca6cd243f0d2645
--- /dev/null
+++ b/samples/server/petstore/php-slim4/lib/Model/MixedPropertiesAndAdditionalPropertiesClass.php
@@ -0,0 +1,36 @@
+<?php
+/**
+ * MixedPropertiesAndAdditionalPropertiesClass
+ *
+ * PHP version 7.1
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+
+/**
+ * NOTE: This class is auto generated by the openapi generator program.
+ * https://github.com/openapitools/openapi-generator
+ */
+namespace OpenAPIServer\Model;
+
+/**
+ * MixedPropertiesAndAdditionalPropertiesClass
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+class MixedPropertiesAndAdditionalPropertiesClass
+{
+    
+    /** @var string $uuid */
+    private $uuid;
+    
+    /** @var \DateTime $dateTime */
+    private $dateTime;
+    
+    /** @var map[string,\OpenAPIServer\Model\Animal] $map */
+    private $map;
+}
diff --git a/samples/server/petstore/php-slim4/lib/Model/Model200Response.php b/samples/server/petstore/php-slim4/lib/Model/Model200Response.php
new file mode 100644
index 0000000000000000000000000000000000000000..986a94acf44765bac545a9b545b15e0fbd9a47bd
--- /dev/null
+++ b/samples/server/petstore/php-slim4/lib/Model/Model200Response.php
@@ -0,0 +1,33 @@
+<?php
+/**
+ * Model200Response
+ *
+ * PHP version 7.1
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+
+/**
+ * NOTE: This class is auto generated by the openapi generator program.
+ * https://github.com/openapitools/openapi-generator
+ */
+namespace OpenAPIServer\Model;
+
+/**
+ * Model200Response
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+class Model200Response
+{
+    
+    /** @var int $name */
+    private $name;
+    
+    /** @var string $class */
+    private $class;
+}
diff --git a/samples/server/petstore/php-slim4/lib/Model/ModelList.php b/samples/server/petstore/php-slim4/lib/Model/ModelList.php
new file mode 100644
index 0000000000000000000000000000000000000000..44350640362f9a2dff363f1ea638c6f500ff240d
--- /dev/null
+++ b/samples/server/petstore/php-slim4/lib/Model/ModelList.php
@@ -0,0 +1,30 @@
+<?php
+/**
+ * ModelList
+ *
+ * PHP version 7.1
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+
+/**
+ * NOTE: This class is auto generated by the openapi generator program.
+ * https://github.com/openapitools/openapi-generator
+ */
+namespace OpenAPIServer\Model;
+
+/**
+ * ModelList
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+class ModelList
+{
+    
+    /** @var string $_123list */
+    private $_123list;
+}
diff --git a/samples/server/petstore/php-slim4/lib/Model/ModelReturn.php b/samples/server/petstore/php-slim4/lib/Model/ModelReturn.php
new file mode 100644
index 0000000000000000000000000000000000000000..2256e1391d4ba98b91339e473ee96621f20c1635
--- /dev/null
+++ b/samples/server/petstore/php-slim4/lib/Model/ModelReturn.php
@@ -0,0 +1,30 @@
+<?php
+/**
+ * ModelReturn
+ *
+ * PHP version 7.1
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+
+/**
+ * NOTE: This class is auto generated by the openapi generator program.
+ * https://github.com/openapitools/openapi-generator
+ */
+namespace OpenAPIServer\Model;
+
+/**
+ * ModelReturn
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+class ModelReturn
+{
+    
+    /** @var int $return */
+    private $return;
+}
diff --git a/samples/server/petstore/php-slim4/lib/Model/Name.php b/samples/server/petstore/php-slim4/lib/Model/Name.php
new file mode 100644
index 0000000000000000000000000000000000000000..f9af33be25192179dec1f3e61cbe53fc646fc98d
--- /dev/null
+++ b/samples/server/petstore/php-slim4/lib/Model/Name.php
@@ -0,0 +1,39 @@
+<?php
+/**
+ * Name
+ *
+ * PHP version 7.1
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+
+/**
+ * NOTE: This class is auto generated by the openapi generator program.
+ * https://github.com/openapitools/openapi-generator
+ */
+namespace OpenAPIServer\Model;
+
+/**
+ * Name
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+class Name
+{
+    
+    /** @var int $name */
+    private $name;
+    
+    /** @var int $snakeCase */
+    private $snakeCase;
+    
+    /** @var string $property */
+    private $property;
+    
+    /** @var int $_123number */
+    private $_123number;
+}
diff --git a/samples/server/petstore/php-slim4/lib/Model/NumberOnly.php b/samples/server/petstore/php-slim4/lib/Model/NumberOnly.php
new file mode 100644
index 0000000000000000000000000000000000000000..0e53788b89e0f6726f720a6254b7ccc92337dec4
--- /dev/null
+++ b/samples/server/petstore/php-slim4/lib/Model/NumberOnly.php
@@ -0,0 +1,30 @@
+<?php
+/**
+ * NumberOnly
+ *
+ * PHP version 7.1
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+
+/**
+ * NOTE: This class is auto generated by the openapi generator program.
+ * https://github.com/openapitools/openapi-generator
+ */
+namespace OpenAPIServer\Model;
+
+/**
+ * NumberOnly
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+class NumberOnly
+{
+    
+    /** @var float $justNumber */
+    private $justNumber;
+}
diff --git a/samples/server/petstore/php-slim4/lib/Model/Order.php b/samples/server/petstore/php-slim4/lib/Model/Order.php
new file mode 100644
index 0000000000000000000000000000000000000000..0949dc6fd4252081eec604426094ebc438f1cec6
--- /dev/null
+++ b/samples/server/petstore/php-slim4/lib/Model/Order.php
@@ -0,0 +1,45 @@
+<?php
+/**
+ * Order
+ *
+ * PHP version 7.1
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+
+/**
+ * NOTE: This class is auto generated by the openapi generator program.
+ * https://github.com/openapitools/openapi-generator
+ */
+namespace OpenAPIServer\Model;
+
+/**
+ * Order
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+class Order
+{
+    
+    /** @var int $id */
+    private $id;
+    
+    /** @var int $petId */
+    private $petId;
+    
+    /** @var int $quantity */
+    private $quantity;
+    
+    /** @var \DateTime $shipDate */
+    private $shipDate;
+    
+    /** @var string $status Order Status*/
+    private $status;
+    
+    /** @var bool $complete */
+    private $complete;
+}
diff --git a/samples/server/petstore/php-slim4/lib/Model/OuterComposite.php b/samples/server/petstore/php-slim4/lib/Model/OuterComposite.php
new file mode 100644
index 0000000000000000000000000000000000000000..7c8f7cd6c9014176b47876116777403dec59ee19
--- /dev/null
+++ b/samples/server/petstore/php-slim4/lib/Model/OuterComposite.php
@@ -0,0 +1,36 @@
+<?php
+/**
+ * OuterComposite
+ *
+ * PHP version 7.1
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+
+/**
+ * NOTE: This class is auto generated by the openapi generator program.
+ * https://github.com/openapitools/openapi-generator
+ */
+namespace OpenAPIServer\Model;
+
+/**
+ * OuterComposite
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+class OuterComposite
+{
+    
+    /** @var float $myNumber */
+    private $myNumber;
+    
+    /** @var string $myString */
+    private $myString;
+    
+    /** @var bool $myBoolean */
+    private $myBoolean;
+}
diff --git a/samples/server/petstore/php-slim4/lib/Model/OuterEnum.php b/samples/server/petstore/php-slim4/lib/Model/OuterEnum.php
new file mode 100644
index 0000000000000000000000000000000000000000..3ad9003f74a7c21c4414e62ddeb34710780661ca
--- /dev/null
+++ b/samples/server/petstore/php-slim4/lib/Model/OuterEnum.php
@@ -0,0 +1,27 @@
+<?php
+/**
+ * OuterEnum
+ *
+ * PHP version 7.1
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+
+/**
+ * NOTE: This class is auto generated by the openapi generator program.
+ * https://github.com/openapitools/openapi-generator
+ */
+namespace OpenAPIServer\Model;
+
+/**
+ * OuterEnum
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+class OuterEnum
+{
+}
diff --git a/samples/server/petstore/php-slim4/lib/Model/Pet.php b/samples/server/petstore/php-slim4/lib/Model/Pet.php
new file mode 100644
index 0000000000000000000000000000000000000000..ab18cd42a42d074f7bd71a367975a2e2b3a92f55
--- /dev/null
+++ b/samples/server/petstore/php-slim4/lib/Model/Pet.php
@@ -0,0 +1,45 @@
+<?php
+/**
+ * Pet
+ *
+ * PHP version 7.1
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+
+/**
+ * NOTE: This class is auto generated by the openapi generator program.
+ * https://github.com/openapitools/openapi-generator
+ */
+namespace OpenAPIServer\Model;
+
+/**
+ * Pet
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+class Pet
+{
+    
+    /** @var int $id */
+    private $id;
+    
+    /** @var \OpenAPIServer\Model\Category $category */
+    private $category;
+    
+    /** @var string $name */
+    private $name;
+    
+    /** @var string[] $photoUrls */
+    private $photoUrls;
+    
+    /** @var \OpenAPIServer\Model\Tag[] $tags */
+    private $tags;
+    
+    /** @var string $status pet status in the store*/
+    private $status;
+}
diff --git a/samples/server/petstore/php-slim4/lib/Model/ReadOnlyFirst.php b/samples/server/petstore/php-slim4/lib/Model/ReadOnlyFirst.php
new file mode 100644
index 0000000000000000000000000000000000000000..8feb77148bc0fa2093bac40350add175cb5e9d09
--- /dev/null
+++ b/samples/server/petstore/php-slim4/lib/Model/ReadOnlyFirst.php
@@ -0,0 +1,33 @@
+<?php
+/**
+ * ReadOnlyFirst
+ *
+ * PHP version 7.1
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+
+/**
+ * NOTE: This class is auto generated by the openapi generator program.
+ * https://github.com/openapitools/openapi-generator
+ */
+namespace OpenAPIServer\Model;
+
+/**
+ * ReadOnlyFirst
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+class ReadOnlyFirst
+{
+    
+    /** @var string $bar */
+    private $bar;
+    
+    /** @var string $baz */
+    private $baz;
+}
diff --git a/samples/server/petstore/php-slim4/lib/Model/SpecialModelName.php b/samples/server/petstore/php-slim4/lib/Model/SpecialModelName.php
new file mode 100644
index 0000000000000000000000000000000000000000..7ee7aef8492cc22597d219234c82dd92fb80b1f0
--- /dev/null
+++ b/samples/server/petstore/php-slim4/lib/Model/SpecialModelName.php
@@ -0,0 +1,30 @@
+<?php
+/**
+ * SpecialModelName
+ *
+ * PHP version 7.1
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+
+/**
+ * NOTE: This class is auto generated by the openapi generator program.
+ * https://github.com/openapitools/openapi-generator
+ */
+namespace OpenAPIServer\Model;
+
+/**
+ * SpecialModelName
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+class SpecialModelName
+{
+    
+    /** @var int $specialPropertyName */
+    private $specialPropertyName;
+}
diff --git a/samples/server/petstore/php-slim4/lib/Model/Tag.php b/samples/server/petstore/php-slim4/lib/Model/Tag.php
new file mode 100644
index 0000000000000000000000000000000000000000..1f3fd8a553f9817d634efdbfa4d7a243765b9959
--- /dev/null
+++ b/samples/server/petstore/php-slim4/lib/Model/Tag.php
@@ -0,0 +1,33 @@
+<?php
+/**
+ * Tag
+ *
+ * PHP version 7.1
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+
+/**
+ * NOTE: This class is auto generated by the openapi generator program.
+ * https://github.com/openapitools/openapi-generator
+ */
+namespace OpenAPIServer\Model;
+
+/**
+ * Tag
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+class Tag
+{
+    
+    /** @var int $id */
+    private $id;
+    
+    /** @var string $name */
+    private $name;
+}
diff --git a/samples/server/petstore/php-slim4/lib/Model/TypeHolderDefault.php b/samples/server/petstore/php-slim4/lib/Model/TypeHolderDefault.php
new file mode 100644
index 0000000000000000000000000000000000000000..b6a35dd8dd75ec33cc062908cab03abf1da1bcdb
--- /dev/null
+++ b/samples/server/petstore/php-slim4/lib/Model/TypeHolderDefault.php
@@ -0,0 +1,42 @@
+<?php
+/**
+ * TypeHolderDefault
+ *
+ * PHP version 7.1
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+
+/**
+ * NOTE: This class is auto generated by the openapi generator program.
+ * https://github.com/openapitools/openapi-generator
+ */
+namespace OpenAPIServer\Model;
+
+/**
+ * TypeHolderDefault
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+class TypeHolderDefault
+{
+    
+    /** @var string $stringItem */
+    private $stringItem;
+    
+    /** @var float $numberItem */
+    private $numberItem;
+    
+    /** @var int $integerItem */
+    private $integerItem;
+    
+    /** @var bool $boolItem */
+    private $boolItem;
+    
+    /** @var int[] $arrayItem */
+    private $arrayItem;
+}
diff --git a/samples/server/petstore/php-slim4/lib/Model/TypeHolderExample.php b/samples/server/petstore/php-slim4/lib/Model/TypeHolderExample.php
new file mode 100644
index 0000000000000000000000000000000000000000..1d916e159fc309c133b10ca8824402d2e2749674
--- /dev/null
+++ b/samples/server/petstore/php-slim4/lib/Model/TypeHolderExample.php
@@ -0,0 +1,45 @@
+<?php
+/**
+ * TypeHolderExample
+ *
+ * PHP version 7.1
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+
+/**
+ * NOTE: This class is auto generated by the openapi generator program.
+ * https://github.com/openapitools/openapi-generator
+ */
+namespace OpenAPIServer\Model;
+
+/**
+ * TypeHolderExample
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+class TypeHolderExample
+{
+    
+    /** @var string $stringItem */
+    private $stringItem;
+    
+    /** @var float $numberItem */
+    private $numberItem;
+    
+    /** @var float $floatItem */
+    private $floatItem;
+    
+    /** @var int $integerItem */
+    private $integerItem;
+    
+    /** @var bool $boolItem */
+    private $boolItem;
+    
+    /** @var int[] $arrayItem */
+    private $arrayItem;
+}
diff --git a/samples/server/petstore/php-slim4/lib/Model/User.php b/samples/server/petstore/php-slim4/lib/Model/User.php
new file mode 100644
index 0000000000000000000000000000000000000000..866c0f244f91eebd9305cd04604f122763d2a23c
--- /dev/null
+++ b/samples/server/petstore/php-slim4/lib/Model/User.php
@@ -0,0 +1,51 @@
+<?php
+/**
+ * User
+ *
+ * PHP version 7.1
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+
+/**
+ * NOTE: This class is auto generated by the openapi generator program.
+ * https://github.com/openapitools/openapi-generator
+ */
+namespace OpenAPIServer\Model;
+
+/**
+ * User
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+class User
+{
+    
+    /** @var int $id */
+    private $id;
+    
+    /** @var string $username */
+    private $username;
+    
+    /** @var string $firstName */
+    private $firstName;
+    
+    /** @var string $lastName */
+    private $lastName;
+    
+    /** @var string $email */
+    private $email;
+    
+    /** @var string $password */
+    private $password;
+    
+    /** @var string $phone */
+    private $phone;
+    
+    /** @var int $userStatus User Status*/
+    private $userStatus;
+}
diff --git a/samples/server/petstore/php-slim4/lib/Model/XmlItem.php b/samples/server/petstore/php-slim4/lib/Model/XmlItem.php
new file mode 100644
index 0000000000000000000000000000000000000000..5a29e4c3bc9469f61a9d31ae27e3190a8202c463
--- /dev/null
+++ b/samples/server/petstore/php-slim4/lib/Model/XmlItem.php
@@ -0,0 +1,114 @@
+<?php
+/**
+ * XmlItem
+ *
+ * PHP version 7.1
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+
+/**
+ * NOTE: This class is auto generated by the openapi generator program.
+ * https://github.com/openapitools/openapi-generator
+ */
+namespace OpenAPIServer\Model;
+
+/**
+ * XmlItem
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+class XmlItem
+{
+    
+    /** @var string $attributeString */
+    private $attributeString;
+    
+    /** @var float $attributeNumber */
+    private $attributeNumber;
+    
+    /** @var int $attributeInteger */
+    private $attributeInteger;
+    
+    /** @var bool $attributeBoolean */
+    private $attributeBoolean;
+    
+    /** @var int[] $wrappedArray */
+    private $wrappedArray;
+    
+    /** @var string $nameString */
+    private $nameString;
+    
+    /** @var float $nameNumber */
+    private $nameNumber;
+    
+    /** @var int $nameInteger */
+    private $nameInteger;
+    
+    /** @var bool $nameBoolean */
+    private $nameBoolean;
+    
+    /** @var int[] $nameArray */
+    private $nameArray;
+    
+    /** @var int[] $nameWrappedArray */
+    private $nameWrappedArray;
+    
+    /** @var string $prefixString */
+    private $prefixString;
+    
+    /** @var float $prefixNumber */
+    private $prefixNumber;
+    
+    /** @var int $prefixInteger */
+    private $prefixInteger;
+    
+    /** @var bool $prefixBoolean */
+    private $prefixBoolean;
+    
+    /** @var int[] $prefixArray */
+    private $prefixArray;
+    
+    /** @var int[] $prefixWrappedArray */
+    private $prefixWrappedArray;
+    
+    /** @var string $namespaceString */
+    private $namespaceString;
+    
+    /** @var float $namespaceNumber */
+    private $namespaceNumber;
+    
+    /** @var int $namespaceInteger */
+    private $namespaceInteger;
+    
+    /** @var bool $namespaceBoolean */
+    private $namespaceBoolean;
+    
+    /** @var int[] $namespaceArray */
+    private $namespaceArray;
+    
+    /** @var int[] $namespaceWrappedArray */
+    private $namespaceWrappedArray;
+    
+    /** @var string $prefixNsString */
+    private $prefixNsString;
+    
+    /** @var float $prefixNsNumber */
+    private $prefixNsNumber;
+    
+    /** @var int $prefixNsInteger */
+    private $prefixNsInteger;
+    
+    /** @var bool $prefixNsBoolean */
+    private $prefixNsBoolean;
+    
+    /** @var int[] $prefixNsArray */
+    private $prefixNsArray;
+    
+    /** @var int[] $prefixNsWrappedArray */
+    private $prefixNsWrappedArray;
+}
diff --git a/samples/server/petstore/php-slim4/lib/SlimRouter.php b/samples/server/petstore/php-slim4/lib/SlimRouter.php
new file mode 100644
index 0000000000000000000000000000000000000000..a42c9b472bea15fd99164d2c067e7e6b72b9d980
--- /dev/null
+++ b/samples/server/petstore/php-slim4/lib/SlimRouter.php
@@ -0,0 +1,761 @@
+<?php
+/**
+ * SlimRouter
+ *
+ * PHP version 7.1
+ *
+ * @package OpenAPIServer
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+
+/**
+ * OpenAPI Petstore
+ *
+ * This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\
+ * The version of the OpenAPI document: 1.0.0
+ * Generated by: https://github.com/openapitools/openapi-generator.git
+ */
+
+/**
+ * NOTE: This class is auto generated by the openapi generator program.
+ * https://github.com/openapitools/openapi-generator
+ * Do not edit the class manually.
+ */
+namespace OpenAPIServer;
+
+use Slim\Factory\AppFactory;
+use Slim\Interfaces\RouteInterface;
+use Psr\Container\ContainerInterface;
+use InvalidArgumentException;
+use Dyorg\TokenAuthentication;
+use Dyorg\TokenAuthentication\TokenSearch;
+use Psr\Http\Message\ServerRequestInterface;
+use OpenAPIServer\Middleware\JsonBodyParserMiddleware;
+use Exception;
+
+/**
+ * SlimRouter Class Doc Comment
+ *
+ * @package OpenAPIServer
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+class SlimRouter
+{
+
+    /** @var App instance */
+    private $slimApp;
+
+    /** @var array[] list of all api operations */
+    private $operations = [
+        [
+            'httpMethod' => 'PATCH',
+            'basePathWithoutHost' => '/v2',
+            'path' => '/another-fake/dummy',
+            'apiPackage' => 'OpenAPIServer\Api',
+            'classname' => 'AbstractAnotherFakeApi',
+            'userClassname' => 'AnotherFakeApi',
+            'operationId' => 'call123TestSpecialTags',
+            'authMethods' => [
+            ],
+        ],
+        [
+            'httpMethod' => 'POST',
+            'basePathWithoutHost' => '/v2',
+            'path' => '/fake/create_xml_item',
+            'apiPackage' => 'OpenAPIServer\Api',
+            'classname' => 'AbstractFakeApi',
+            'userClassname' => 'FakeApi',
+            'operationId' => 'createXmlItem',
+            'authMethods' => [
+            ],
+        ],
+        [
+            'httpMethod' => 'POST',
+            'basePathWithoutHost' => '/v2',
+            'path' => '/fake/outer/boolean',
+            'apiPackage' => 'OpenAPIServer\Api',
+            'classname' => 'AbstractFakeApi',
+            'userClassname' => 'FakeApi',
+            'operationId' => 'fakeOuterBooleanSerialize',
+            'authMethods' => [
+            ],
+        ],
+        [
+            'httpMethod' => 'POST',
+            'basePathWithoutHost' => '/v2',
+            'path' => '/fake/outer/composite',
+            'apiPackage' => 'OpenAPIServer\Api',
+            'classname' => 'AbstractFakeApi',
+            'userClassname' => 'FakeApi',
+            'operationId' => 'fakeOuterCompositeSerialize',
+            'authMethods' => [
+            ],
+        ],
+        [
+            'httpMethod' => 'POST',
+            'basePathWithoutHost' => '/v2',
+            'path' => '/fake/outer/number',
+            'apiPackage' => 'OpenAPIServer\Api',
+            'classname' => 'AbstractFakeApi',
+            'userClassname' => 'FakeApi',
+            'operationId' => 'fakeOuterNumberSerialize',
+            'authMethods' => [
+            ],
+        ],
+        [
+            'httpMethod' => 'POST',
+            'basePathWithoutHost' => '/v2',
+            'path' => '/fake/outer/string',
+            'apiPackage' => 'OpenAPIServer\Api',
+            'classname' => 'AbstractFakeApi',
+            'userClassname' => 'FakeApi',
+            'operationId' => 'fakeOuterStringSerialize',
+            'authMethods' => [
+            ],
+        ],
+        [
+            'httpMethod' => 'PUT',
+            'basePathWithoutHost' => '/v2',
+            'path' => '/fake/body-with-file-schema',
+            'apiPackage' => 'OpenAPIServer\Api',
+            'classname' => 'AbstractFakeApi',
+            'userClassname' => 'FakeApi',
+            'operationId' => 'testBodyWithFileSchema',
+            'authMethods' => [
+            ],
+        ],
+        [
+            'httpMethod' => 'PUT',
+            'basePathWithoutHost' => '/v2',
+            'path' => '/fake/body-with-query-params',
+            'apiPackage' => 'OpenAPIServer\Api',
+            'classname' => 'AbstractFakeApi',
+            'userClassname' => 'FakeApi',
+            'operationId' => 'testBodyWithQueryParams',
+            'authMethods' => [
+            ],
+        ],
+        [
+            'httpMethod' => 'PATCH',
+            'basePathWithoutHost' => '/v2',
+            'path' => '/fake',
+            'apiPackage' => 'OpenAPIServer\Api',
+            'classname' => 'AbstractFakeApi',
+            'userClassname' => 'FakeApi',
+            'operationId' => 'testClientModel',
+            'authMethods' => [
+            ],
+        ],
+        [
+            'httpMethod' => 'POST',
+            'basePathWithoutHost' => '/v2',
+            'path' => '/fake',
+            'apiPackage' => 'OpenAPIServer\Api',
+            'classname' => 'AbstractFakeApi',
+            'userClassname' => 'FakeApi',
+            'operationId' => 'testEndpointParameters',
+            'authMethods' => [
+                // http security schema named 'http_basic_test'
+                [
+                    'type' => 'http',
+                    'isBasic' => true,
+                    'isBearer' => false,
+                    'isApiKey' => false,
+                    'isOAuth' => false,
+                ],
+            ],
+        ],
+        [
+            'httpMethod' => 'GET',
+            'basePathWithoutHost' => '/v2',
+            'path' => '/fake',
+            'apiPackage' => 'OpenAPIServer\Api',
+            'classname' => 'AbstractFakeApi',
+            'userClassname' => 'FakeApi',
+            'operationId' => 'testEnumParameters',
+            'authMethods' => [
+            ],
+        ],
+        [
+            'httpMethod' => 'DELETE',
+            'basePathWithoutHost' => '/v2',
+            'path' => '/fake',
+            'apiPackage' => 'OpenAPIServer\Api',
+            'classname' => 'AbstractFakeApi',
+            'userClassname' => 'FakeApi',
+            'operationId' => 'testGroupParameters',
+            'authMethods' => [
+            ],
+        ],
+        [
+            'httpMethod' => 'POST',
+            'basePathWithoutHost' => '/v2',
+            'path' => '/fake/inline-additionalProperties',
+            'apiPackage' => 'OpenAPIServer\Api',
+            'classname' => 'AbstractFakeApi',
+            'userClassname' => 'FakeApi',
+            'operationId' => 'testInlineAdditionalProperties',
+            'authMethods' => [
+            ],
+        ],
+        [
+            'httpMethod' => 'GET',
+            'basePathWithoutHost' => '/v2',
+            'path' => '/fake/jsonFormData',
+            'apiPackage' => 'OpenAPIServer\Api',
+            'classname' => 'AbstractFakeApi',
+            'userClassname' => 'FakeApi',
+            'operationId' => 'testJsonFormData',
+            'authMethods' => [
+            ],
+        ],
+        [
+            'httpMethod' => 'PUT',
+            'basePathWithoutHost' => '/v2',
+            'path' => '/fake/test-query-paramters',
+            'apiPackage' => 'OpenAPIServer\Api',
+            'classname' => 'AbstractFakeApi',
+            'userClassname' => 'FakeApi',
+            'operationId' => 'testQueryParameterCollectionFormat',
+            'authMethods' => [
+            ],
+        ],
+        [
+            'httpMethod' => 'PATCH',
+            'basePathWithoutHost' => '/v2',
+            'path' => '/fake_classname_test',
+            'apiPackage' => 'OpenAPIServer\Api',
+            'classname' => 'AbstractFakeClassnameTags123Api',
+            'userClassname' => 'FakeClassnameTags123Api',
+            'operationId' => 'testClassname',
+            'authMethods' => [
+                // apiKey security schema named 'api_key_query'
+                [
+                    'type' => 'apiKey',
+                    'isBasic' => false,
+                    'isBearer' => false,
+                    'isApiKey' => true,
+                    'isOAuth' => false,
+                    'keyParamName' => 'api_key_query',
+                    'isKeyInHeader' => false,
+                    'isKeyInQuery' => true,
+                    'isKeyInCookie' => false,
+                ],
+            ],
+        ],
+        [
+            'httpMethod' => 'POST',
+            'basePathWithoutHost' => '/v2',
+            'path' => '/pet',
+            'apiPackage' => 'OpenAPIServer\Api',
+            'classname' => 'AbstractPetApi',
+            'userClassname' => 'PetApi',
+            'operationId' => 'addPet',
+            'authMethods' => [
+                // oauth2 security schema named 'petstore_auth'
+                [
+                    'type' => 'oauth2',
+                    'isBasic' => false,
+                    'isBearer' => false,
+                    'isApiKey' => false,
+                    'isOAuth' => true,
+                    'scopes' => [
+                        'write:pets', // modify pets in your account
+                        'read:pets', // read your pets
+                    ],
+                ],
+            ],
+        ],
+        [
+            'httpMethod' => 'GET',
+            'basePathWithoutHost' => '/v2',
+            'path' => '/pet/findByStatus',
+            'apiPackage' => 'OpenAPIServer\Api',
+            'classname' => 'AbstractPetApi',
+            'userClassname' => 'PetApi',
+            'operationId' => 'findPetsByStatus',
+            'authMethods' => [
+                // oauth2 security schema named 'petstore_auth'
+                [
+                    'type' => 'oauth2',
+                    'isBasic' => false,
+                    'isBearer' => false,
+                    'isApiKey' => false,
+                    'isOAuth' => true,
+                    'scopes' => [
+                        'write:pets', // modify pets in your account
+                        'read:pets', // read your pets
+                    ],
+                ],
+            ],
+        ],
+        [
+            'httpMethod' => 'GET',
+            'basePathWithoutHost' => '/v2',
+            'path' => '/pet/findByTags',
+            'apiPackage' => 'OpenAPIServer\Api',
+            'classname' => 'AbstractPetApi',
+            'userClassname' => 'PetApi',
+            'operationId' => 'findPetsByTags',
+            'authMethods' => [
+                // oauth2 security schema named 'petstore_auth'
+                [
+                    'type' => 'oauth2',
+                    'isBasic' => false,
+                    'isBearer' => false,
+                    'isApiKey' => false,
+                    'isOAuth' => true,
+                    'scopes' => [
+                        'write:pets', // modify pets in your account
+                        'read:pets', // read your pets
+                    ],
+                ],
+            ],
+        ],
+        [
+            'httpMethod' => 'PUT',
+            'basePathWithoutHost' => '/v2',
+            'path' => '/pet',
+            'apiPackage' => 'OpenAPIServer\Api',
+            'classname' => 'AbstractPetApi',
+            'userClassname' => 'PetApi',
+            'operationId' => 'updatePet',
+            'authMethods' => [
+                // oauth2 security schema named 'petstore_auth'
+                [
+                    'type' => 'oauth2',
+                    'isBasic' => false,
+                    'isBearer' => false,
+                    'isApiKey' => false,
+                    'isOAuth' => true,
+                    'scopes' => [
+                        'write:pets', // modify pets in your account
+                        'read:pets', // read your pets
+                    ],
+                ],
+            ],
+        ],
+        [
+            'httpMethod' => 'DELETE',
+            'basePathWithoutHost' => '/v2',
+            'path' => '/pet/{petId}',
+            'apiPackage' => 'OpenAPIServer\Api',
+            'classname' => 'AbstractPetApi',
+            'userClassname' => 'PetApi',
+            'operationId' => 'deletePet',
+            'authMethods' => [
+                // oauth2 security schema named 'petstore_auth'
+                [
+                    'type' => 'oauth2',
+                    'isBasic' => false,
+                    'isBearer' => false,
+                    'isApiKey' => false,
+                    'isOAuth' => true,
+                    'scopes' => [
+                        'write:pets', // modify pets in your account
+                        'read:pets', // read your pets
+                    ],
+                ],
+            ],
+        ],
+        [
+            'httpMethod' => 'GET',
+            'basePathWithoutHost' => '/v2',
+            'path' => '/pet/{petId}',
+            'apiPackage' => 'OpenAPIServer\Api',
+            'classname' => 'AbstractPetApi',
+            'userClassname' => 'PetApi',
+            'operationId' => 'getPetById',
+            'authMethods' => [
+                // apiKey security schema named 'api_key'
+                [
+                    'type' => 'apiKey',
+                    'isBasic' => false,
+                    'isBearer' => false,
+                    'isApiKey' => true,
+                    'isOAuth' => false,
+                    'keyParamName' => 'api_key',
+                    'isKeyInHeader' => true,
+                    'isKeyInQuery' => false,
+                    'isKeyInCookie' => false,
+                ],
+            ],
+        ],
+        [
+            'httpMethod' => 'POST',
+            'basePathWithoutHost' => '/v2',
+            'path' => '/pet/{petId}',
+            'apiPackage' => 'OpenAPIServer\Api',
+            'classname' => 'AbstractPetApi',
+            'userClassname' => 'PetApi',
+            'operationId' => 'updatePetWithForm',
+            'authMethods' => [
+                // oauth2 security schema named 'petstore_auth'
+                [
+                    'type' => 'oauth2',
+                    'isBasic' => false,
+                    'isBearer' => false,
+                    'isApiKey' => false,
+                    'isOAuth' => true,
+                    'scopes' => [
+                        'write:pets', // modify pets in your account
+                        'read:pets', // read your pets
+                    ],
+                ],
+            ],
+        ],
+        [
+            'httpMethod' => 'POST',
+            'basePathWithoutHost' => '/v2',
+            'path' => '/pet/{petId}/uploadImage',
+            'apiPackage' => 'OpenAPIServer\Api',
+            'classname' => 'AbstractPetApi',
+            'userClassname' => 'PetApi',
+            'operationId' => 'uploadFile',
+            'authMethods' => [
+                // oauth2 security schema named 'petstore_auth'
+                [
+                    'type' => 'oauth2',
+                    'isBasic' => false,
+                    'isBearer' => false,
+                    'isApiKey' => false,
+                    'isOAuth' => true,
+                    'scopes' => [
+                        'write:pets', // modify pets in your account
+                        'read:pets', // read your pets
+                    ],
+                ],
+            ],
+        ],
+        [
+            'httpMethod' => 'POST',
+            'basePathWithoutHost' => '/v2',
+            'path' => '/fake/{petId}/uploadImageWithRequiredFile',
+            'apiPackage' => 'OpenAPIServer\Api',
+            'classname' => 'AbstractPetApi',
+            'userClassname' => 'PetApi',
+            'operationId' => 'uploadFileWithRequiredFile',
+            'authMethods' => [
+                // oauth2 security schema named 'petstore_auth'
+                [
+                    'type' => 'oauth2',
+                    'isBasic' => false,
+                    'isBearer' => false,
+                    'isApiKey' => false,
+                    'isOAuth' => true,
+                    'scopes' => [
+                        'write:pets', // modify pets in your account
+                        'read:pets', // read your pets
+                    ],
+                ],
+            ],
+        ],
+        [
+            'httpMethod' => 'GET',
+            'basePathWithoutHost' => '/v2',
+            'path' => '/store/inventory',
+            'apiPackage' => 'OpenAPIServer\Api',
+            'classname' => 'AbstractStoreApi',
+            'userClassname' => 'StoreApi',
+            'operationId' => 'getInventory',
+            'authMethods' => [
+                // apiKey security schema named 'api_key'
+                [
+                    'type' => 'apiKey',
+                    'isBasic' => false,
+                    'isBearer' => false,
+                    'isApiKey' => true,
+                    'isOAuth' => false,
+                    'keyParamName' => 'api_key',
+                    'isKeyInHeader' => true,
+                    'isKeyInQuery' => false,
+                    'isKeyInCookie' => false,
+                ],
+            ],
+        ],
+        [
+            'httpMethod' => 'POST',
+            'basePathWithoutHost' => '/v2',
+            'path' => '/store/order',
+            'apiPackage' => 'OpenAPIServer\Api',
+            'classname' => 'AbstractStoreApi',
+            'userClassname' => 'StoreApi',
+            'operationId' => 'placeOrder',
+            'authMethods' => [
+            ],
+        ],
+        [
+            'httpMethod' => 'DELETE',
+            'basePathWithoutHost' => '/v2',
+            'path' => '/store/order/{order_id}',
+            'apiPackage' => 'OpenAPIServer\Api',
+            'classname' => 'AbstractStoreApi',
+            'userClassname' => 'StoreApi',
+            'operationId' => 'deleteOrder',
+            'authMethods' => [
+            ],
+        ],
+        [
+            'httpMethod' => 'GET',
+            'basePathWithoutHost' => '/v2',
+            'path' => '/store/order/{order_id}',
+            'apiPackage' => 'OpenAPIServer\Api',
+            'classname' => 'AbstractStoreApi',
+            'userClassname' => 'StoreApi',
+            'operationId' => 'getOrderById',
+            'authMethods' => [
+            ],
+        ],
+        [
+            'httpMethod' => 'POST',
+            'basePathWithoutHost' => '/v2',
+            'path' => '/user',
+            'apiPackage' => 'OpenAPIServer\Api',
+            'classname' => 'AbstractUserApi',
+            'userClassname' => 'UserApi',
+            'operationId' => 'createUser',
+            'authMethods' => [
+            ],
+        ],
+        [
+            'httpMethod' => 'POST',
+            'basePathWithoutHost' => '/v2',
+            'path' => '/user/createWithArray',
+            'apiPackage' => 'OpenAPIServer\Api',
+            'classname' => 'AbstractUserApi',
+            'userClassname' => 'UserApi',
+            'operationId' => 'createUsersWithArrayInput',
+            'authMethods' => [
+            ],
+        ],
+        [
+            'httpMethod' => 'POST',
+            'basePathWithoutHost' => '/v2',
+            'path' => '/user/createWithList',
+            'apiPackage' => 'OpenAPIServer\Api',
+            'classname' => 'AbstractUserApi',
+            'userClassname' => 'UserApi',
+            'operationId' => 'createUsersWithListInput',
+            'authMethods' => [
+            ],
+        ],
+        [
+            'httpMethod' => 'GET',
+            'basePathWithoutHost' => '/v2',
+            'path' => '/user/login',
+            'apiPackage' => 'OpenAPIServer\Api',
+            'classname' => 'AbstractUserApi',
+            'userClassname' => 'UserApi',
+            'operationId' => 'loginUser',
+            'authMethods' => [
+            ],
+        ],
+        [
+            'httpMethod' => 'GET',
+            'basePathWithoutHost' => '/v2',
+            'path' => '/user/logout',
+            'apiPackage' => 'OpenAPIServer\Api',
+            'classname' => 'AbstractUserApi',
+            'userClassname' => 'UserApi',
+            'operationId' => 'logoutUser',
+            'authMethods' => [
+            ],
+        ],
+        [
+            'httpMethod' => 'DELETE',
+            'basePathWithoutHost' => '/v2',
+            'path' => '/user/{username}',
+            'apiPackage' => 'OpenAPIServer\Api',
+            'classname' => 'AbstractUserApi',
+            'userClassname' => 'UserApi',
+            'operationId' => 'deleteUser',
+            'authMethods' => [
+            ],
+        ],
+        [
+            'httpMethod' => 'GET',
+            'basePathWithoutHost' => '/v2',
+            'path' => '/user/{username}',
+            'apiPackage' => 'OpenAPIServer\Api',
+            'classname' => 'AbstractUserApi',
+            'userClassname' => 'UserApi',
+            'operationId' => 'getUserByName',
+            'authMethods' => [
+            ],
+        ],
+        [
+            'httpMethod' => 'PUT',
+            'basePathWithoutHost' => '/v2',
+            'path' => '/user/{username}',
+            'apiPackage' => 'OpenAPIServer\Api',
+            'classname' => 'AbstractUserApi',
+            'userClassname' => 'UserApi',
+            'operationId' => 'updateUser',
+            'authMethods' => [
+            ],
+        ],
+    ];
+
+    /**
+     * Class constructor
+     *
+     * @param ContainerInterface|array $settings Either a ContainerInterface or an associative array of app settings
+     *
+     * @throws Exception When implementation class doesn't exists
+     */
+    public function __construct($settings = [])
+    {
+        if ($settings instanceof ContainerInterface) {
+            // Set container to create App with on AppFactory
+            AppFactory::setContainer($settings);
+        }
+        $this->slimApp = AppFactory::create();
+
+        // middlewares requires Psr\Container\ContainerInterface
+        $container = $this->slimApp->getContainer();
+
+        $authPackage = 'OpenAPIServer\Auth';
+        $basicAuthenticator = function (ServerRequestInterface &$request, TokenSearch $tokenSearch) use ($authPackage) {
+            $message = "How about extending AbstractAuthenticator class by {$authPackage}\BasicAuthenticator?";
+            throw new Exception($message);
+        };
+        $apiKeyAuthenticator = function (ServerRequestInterface &$request, TokenSearch $tokenSearch) use ($authPackage) {
+            $message = "How about extending AbstractAuthenticator class by {$authPackage}\ApiKeyAuthenticator?";
+            throw new Exception($message);
+        };
+        $oAuthAuthenticator = function (ServerRequestInterface &$request, TokenSearch $tokenSearch) use ($authPackage) {
+            $message = "How about extending AbstractAuthenticator class by {$authPackage}\OAuthAuthenticator?";
+            throw new Exception($message);
+        };
+
+        $userOptions = null;
+        if ($settings instanceof ContainerInterface && $settings->has('tokenAuthenticationOptions')) {
+            $userOptions = $settings->get('tokenAuthenticationOptions');
+        } elseif (is_array($settings) && isset($settings['tokenAuthenticationOptions'])) {
+            $userOptions = $settings['tokenAuthenticationOptions'];
+        }
+
+        foreach ($this->operations as $operation) {
+            $callback = function ($request, $response, $arguments) use ($operation) {
+                $message = "How about extending {$operation['classname']} by {$operation['apiPackage']}\\{$operation['userClassname']} class implementing {$operation['operationId']} as a {$operation['httpMethod']} method?";
+                throw new Exception($message);
+                $response->getBody()->write($message);
+                return $response->withStatus(501);
+            };
+            $middlewares = [new JsonBodyParserMiddleware()];
+
+            if (class_exists("\\{$operation['apiPackage']}\\{$operation['userClassname']}")) {
+                $callback = "\\{$operation['apiPackage']}\\{$operation['userClassname']}:{$operation['operationId']}";
+            }
+
+            foreach ($operation['authMethods'] as $authMethod) {
+                switch ($authMethod['type']) {
+                    case 'http':
+                        $authenticatorClassname = "\\{$authPackage}\\BasicAuthenticator";
+                        if (class_exists($authenticatorClassname)) {
+                            $basicAuthenticator = new $authenticatorClassname($container);
+                        }
+
+                        $middlewares[] = new TokenAuthentication($this->getTokenAuthenticationOptions([
+                            'authenticator' => $basicAuthenticator,
+                            'regex' => $authMethod['isBearer'] ? '/Bearer\s+(.*)$/i' : '/Basic\s+(.*)$/i',
+                            'header' => 'Authorization',
+                            'parameter' => null,
+                            'cookie' => null,
+                            'argument' => null,
+                        ], $userOptions));
+                        break;
+                    case 'apiKey':
+                        $authenticatorClassname = "\\{$authPackage}\\ApiKeyAuthenticator";
+                        if (class_exists($authenticatorClassname)) {
+                            $apiKeyAuthenticator = new $authenticatorClassname($container);
+                        }
+
+                        $middlewares[] = new TokenAuthentication($this->getTokenAuthenticationOptions([
+                            'authenticator' => $apiKeyAuthenticator,
+                            'regex' => '/^(.*)$/i',
+                            'header' => $authMethod['isKeyInHeader'] ? $authMethod['keyParamName'] : null,
+                            'parameter' => $authMethod['isKeyInQuery'] ? $authMethod['keyParamName'] : null,
+                            'cookie' => $authMethod['isKeyInCookie'] ? $authMethod['keyParamName'] : null,
+                            'argument' => null,
+                        ], $userOptions));
+                        break;
+                    case 'oauth2':
+                        $authenticatorClassname = "\\{$authPackage}\\OAuthAuthenticator";
+                        if (class_exists($authenticatorClassname)) {
+                            $oAuthAuthenticator = new $authenticatorClassname($container, $authMethod['scopes']);
+                        }
+
+                        $middlewares[] = new TokenAuthentication($this->getTokenAuthenticationOptions([
+                            'authenticator' => $oAuthAuthenticator,
+                            'regex' => '/Bearer\s+(.*)$/i',
+                            'header' => 'Authorization',
+                            'parameter' => null,
+                            'cookie' => null,
+                            'argument' => null,
+                        ], $userOptions));
+                        break;
+                    default:
+                        throw new Exception('Unknown authorization schema type');
+                }
+            }
+
+            $this->addRoute(
+                [$operation['httpMethod']],
+                "{$operation['basePathWithoutHost']}{$operation['path']}",
+                $callback,
+                $middlewares
+            )->setName($operation['operationId']);
+        }
+    }
+
+    /**
+     * Merges user defined options with dynamic params
+     *
+     * @param array $staticOptions Required static options
+     * @param array $userOptions   User options
+     *
+     * @return array Merged array
+     */
+    private function getTokenAuthenticationOptions(array $staticOptions, array $userOptions = null)
+    {
+        if (is_array($userOptions) === false) {
+            return $staticOptions;
+        }
+
+        return array_merge($userOptions, $staticOptions);
+    }
+
+    /**
+     * Add route with multiple methods
+     *
+     * @param string[]        $methods     Numeric array of HTTP method names
+     * @param string          $pattern     The route URI pattern
+     * @param callable|string $callable    The route callback routine
+     * @param array|null      $middlewares List of middlewares
+     *
+     * @return RouteInterface
+     *
+     * @throws InvalidArgumentException If the route pattern isn't a string
+     */
+    public function addRoute(array $methods, string $pattern, $callable, $middlewares = [])
+    {
+        $route = $this->slimApp->map($methods, $pattern, $callable);
+        foreach ($middlewares as $middleware) {
+            $route->add($middleware);
+        }
+        return $route;
+    }
+
+    /**
+     * Returns Slim Framework instance
+     *
+     * @return App
+     */
+    public function getSlimApp()
+    {
+        return $this->slimApp;
+    }
+}
diff --git a/samples/server/petstore/php-slim4/phpcs.xml.dist b/samples/server/petstore/php-slim4/phpcs.xml.dist
new file mode 100644
index 0000000000000000000000000000000000000000..69f4ddac71c30bc93fc3d5386e26e7e03ffefc34
--- /dev/null
+++ b/samples/server/petstore/php-slim4/phpcs.xml.dist
@@ -0,0 +1,31 @@
+<?xml version="1.0"?>
+<ruleset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="OpenAPI Petstore Config" xsi:noNamespaceSchemaLocation="phpcs.xsd">
+    <description>PHP_CodeSniffer config for OpenAPI Petstore</description>
+
+    <!-- Path to inspected files -->
+    <file>./</file>
+
+    <!-- Don't need to inspect installed packages -->
+    <exclude-pattern>./vendor</exclude-pattern>
+
+    <!-- <basepath>     A path to strip from the front of file paths inside reports -->
+    <arg name="basepath" value="."/>
+
+    <!-- colors              Use colors in output -->
+    <arg name="colors"/>
+
+    <!-- Do not print warnings -->
+    <!-- <arg name="warning-severity" value="0"/> -->
+
+    <!-- -p    Show progress of the run -->
+    <!-- -s    Show sniff codes in all reports -->
+    <arg value="ps"/>
+
+    <!-- Include the whole PSR12 standard -->
+    <rule ref="PSR12">
+        <!-- There is no way to wrap generated comments, just disable that rule for now -->
+        <exclude name="Generic.Files.LineLength.TooLong" />
+        <!-- Codegen generates variables with underscore on purpose -->
+        <exclude name="PSR2.Classes.PropertyDeclaration.Underscore" />
+    </rule>
+</ruleset>
\ No newline at end of file
diff --git a/samples/server/petstore/php-slim4/phpunit.xml.dist b/samples/server/petstore/php-slim4/phpunit.xml.dist
new file mode 100644
index 0000000000000000000000000000000000000000..6af1442ee65371a1428bf884529061d3860a6ce3
--- /dev/null
+++ b/samples/server/petstore/php-slim4/phpunit.xml.dist
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<phpunit
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/4.8/phpunit.xsd"
+    bootstrap="./vendor/autoload.php"
+    colors="true"
+    convertErrorsToExceptions="true"
+    convertNoticesToExceptions="true"
+    convertWarningsToExceptions="true"
+    beStrictAboutTestsThatDoNotTestAnything="false"
+    stopOnFailure="false"
+>
+    <testsuites>
+        <testsuite name="Apis">
+            <directory>./test/Api</directory>
+        </testsuite>
+        <testsuite name="Models">
+            <directory>./test/Model</directory>
+        </testsuite>
+    </testsuites>
+    <filter>
+        <whitelist processUncoveredFilesFromWhitelist="true">
+            <directory suffix=".php">./lib/Api</directory>
+            <directory suffix=".php">./lib/Model</directory>
+        </whitelist>
+    </filter>
+    <php>
+        <ini name="error_reporting" value="E_ALL" />
+    </php>
+</phpunit>
diff --git a/samples/server/petstore/php-slim4/test/Api/AnotherFakeApiTest.php b/samples/server/petstore/php-slim4/test/Api/AnotherFakeApiTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..fc8c82eedaa95b58829b369aff89dd1f3f82b77c
--- /dev/null
+++ b/samples/server/petstore/php-slim4/test/Api/AnotherFakeApiTest.php
@@ -0,0 +1,80 @@
+<?php
+/**
+ * AnotherFakeApiTest
+ *
+ * PHP version 7.1
+ *
+ * @package OpenAPIServer\Api
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+
+/**
+ * OpenAPI Petstore
+ *
+ * This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\
+ * The version of the OpenAPI document: 1.0.0
+ * Generated by: https://github.com/openapitools/openapi-generator.git
+ */
+
+/**
+ * NOTE: This class is auto generated by the openapi generator program.
+ * https://github.com/openapitools/openapi-generator
+ * Please update the test case below to test the endpoint.
+ */
+namespace OpenAPIServer\Api;
+
+use PHPUnit\Framework\TestCase;
+use OpenAPIServer\Api\AnotherFakeApi;
+
+/**
+ * AnotherFakeApiTest Class Doc Comment
+ *
+ * @package OpenAPIServer\Api
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ *
+ * @coversDefaultClass \OpenAPIServer\Api\AnotherFakeApi
+ */
+class AnotherFakeApiTest extends TestCase
+{
+
+    /**
+     * Setup before running any test cases
+     */
+    public static function setUpBeforeClass()
+    {
+    }
+
+    /**
+     * Setup before running each test case
+     */
+    public function setUp()
+    {
+    }
+
+    /**
+     * Clean up after running each test case
+     */
+    public function tearDown()
+    {
+    }
+
+    /**
+     * Clean up after running all test cases
+     */
+    public static function tearDownAfterClass()
+    {
+    }
+
+    /**
+     * Test case for call123TestSpecialTags
+     *
+     * To test special tags.
+     *
+     * @covers ::call123TestSpecialTags
+     */
+    public function testCall123TestSpecialTags()
+    {
+    }
+}
diff --git a/samples/server/petstore/php-slim4/test/Api/FakeApiTest.php b/samples/server/petstore/php-slim4/test/Api/FakeApiTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..66534198a5f5864b7c32273545d56203e28ebad3
--- /dev/null
+++ b/samples/server/petstore/php-slim4/test/Api/FakeApiTest.php
@@ -0,0 +1,223 @@
+<?php
+/**
+ * FakeApiTest
+ *
+ * PHP version 7.1
+ *
+ * @package OpenAPIServer\Api
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+
+/**
+ * OpenAPI Petstore
+ *
+ * This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\
+ * The version of the OpenAPI document: 1.0.0
+ * Generated by: https://github.com/openapitools/openapi-generator.git
+ */
+
+/**
+ * NOTE: This class is auto generated by the openapi generator program.
+ * https://github.com/openapitools/openapi-generator
+ * Please update the test case below to test the endpoint.
+ */
+namespace OpenAPIServer\Api;
+
+use PHPUnit\Framework\TestCase;
+use OpenAPIServer\Api\FakeApi;
+
+/**
+ * FakeApiTest Class Doc Comment
+ *
+ * @package OpenAPIServer\Api
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ *
+ * @coversDefaultClass \OpenAPIServer\Api\FakeApi
+ */
+class FakeApiTest extends TestCase
+{
+
+    /**
+     * Setup before running any test cases
+     */
+    public static function setUpBeforeClass()
+    {
+    }
+
+    /**
+     * Setup before running each test case
+     */
+    public function setUp()
+    {
+    }
+
+    /**
+     * Clean up after running each test case
+     */
+    public function tearDown()
+    {
+    }
+
+    /**
+     * Clean up after running all test cases
+     */
+    public static function tearDownAfterClass()
+    {
+    }
+
+    /**
+     * Test case for createXmlItem
+     *
+     * creates an XmlItem.
+     *
+     * @covers ::createXmlItem
+     */
+    public function testCreateXmlItem()
+    {
+    }
+
+    /**
+     * Test case for fakeOuterBooleanSerialize
+     *
+     * .
+     *
+     * @covers ::fakeOuterBooleanSerialize
+     */
+    public function testFakeOuterBooleanSerialize()
+    {
+    }
+
+    /**
+     * Test case for fakeOuterCompositeSerialize
+     *
+     * .
+     *
+     * @covers ::fakeOuterCompositeSerialize
+     */
+    public function testFakeOuterCompositeSerialize()
+    {
+    }
+
+    /**
+     * Test case for fakeOuterNumberSerialize
+     *
+     * .
+     *
+     * @covers ::fakeOuterNumberSerialize
+     */
+    public function testFakeOuterNumberSerialize()
+    {
+    }
+
+    /**
+     * Test case for fakeOuterStringSerialize
+     *
+     * .
+     *
+     * @covers ::fakeOuterStringSerialize
+     */
+    public function testFakeOuterStringSerialize()
+    {
+    }
+
+    /**
+     * Test case for testBodyWithFileSchema
+     *
+     * .
+     *
+     * @covers ::testBodyWithFileSchema
+     */
+    public function testTestBodyWithFileSchema()
+    {
+    }
+
+    /**
+     * Test case for testBodyWithQueryParams
+     *
+     * .
+     *
+     * @covers ::testBodyWithQueryParams
+     */
+    public function testTestBodyWithQueryParams()
+    {
+    }
+
+    /**
+     * Test case for testClientModel
+     *
+     * To test \"client\" model.
+     *
+     * @covers ::testClientModel
+     */
+    public function testTestClientModel()
+    {
+    }
+
+    /**
+     * Test case for testEndpointParameters
+     *
+     * Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트.
+     *
+     * @covers ::testEndpointParameters
+     */
+    public function testTestEndpointParameters()
+    {
+    }
+
+    /**
+     * Test case for testEnumParameters
+     *
+     * To test enum parameters.
+     *
+     * @covers ::testEnumParameters
+     */
+    public function testTestEnumParameters()
+    {
+    }
+
+    /**
+     * Test case for testGroupParameters
+     *
+     * Fake endpoint to test group parameters (optional).
+     *
+     * @covers ::testGroupParameters
+     */
+    public function testTestGroupParameters()
+    {
+    }
+
+    /**
+     * Test case for testInlineAdditionalProperties
+     *
+     * test inline additionalProperties.
+     *
+     * @covers ::testInlineAdditionalProperties
+     */
+    public function testTestInlineAdditionalProperties()
+    {
+    }
+
+    /**
+     * Test case for testJsonFormData
+     *
+     * test json serialization of form data.
+     *
+     * @covers ::testJsonFormData
+     */
+    public function testTestJsonFormData()
+    {
+    }
+
+    /**
+     * Test case for testQueryParameterCollectionFormat
+     *
+     * .
+     *
+     * @covers ::testQueryParameterCollectionFormat
+     */
+    public function testTestQueryParameterCollectionFormat()
+    {
+    }
+}
diff --git a/samples/server/petstore/php-slim4/test/Api/FakeClassnameTags123ApiTest.php b/samples/server/petstore/php-slim4/test/Api/FakeClassnameTags123ApiTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..7cf40c3f701c69ceab27a7deaf555b0653f63c35
--- /dev/null
+++ b/samples/server/petstore/php-slim4/test/Api/FakeClassnameTags123ApiTest.php
@@ -0,0 +1,80 @@
+<?php
+/**
+ * FakeClassnameTags123ApiTest
+ *
+ * PHP version 7.1
+ *
+ * @package OpenAPIServer\Api
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+
+/**
+ * OpenAPI Petstore
+ *
+ * This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\
+ * The version of the OpenAPI document: 1.0.0
+ * Generated by: https://github.com/openapitools/openapi-generator.git
+ */
+
+/**
+ * NOTE: This class is auto generated by the openapi generator program.
+ * https://github.com/openapitools/openapi-generator
+ * Please update the test case below to test the endpoint.
+ */
+namespace OpenAPIServer\Api;
+
+use PHPUnit\Framework\TestCase;
+use OpenAPIServer\Api\FakeClassnameTags123Api;
+
+/**
+ * FakeClassnameTags123ApiTest Class Doc Comment
+ *
+ * @package OpenAPIServer\Api
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ *
+ * @coversDefaultClass \OpenAPIServer\Api\FakeClassnameTags123Api
+ */
+class FakeClassnameTags123ApiTest extends TestCase
+{
+
+    /**
+     * Setup before running any test cases
+     */
+    public static function setUpBeforeClass()
+    {
+    }
+
+    /**
+     * Setup before running each test case
+     */
+    public function setUp()
+    {
+    }
+
+    /**
+     * Clean up after running each test case
+     */
+    public function tearDown()
+    {
+    }
+
+    /**
+     * Clean up after running all test cases
+     */
+    public static function tearDownAfterClass()
+    {
+    }
+
+    /**
+     * Test case for testClassname
+     *
+     * To test class name in snake case.
+     *
+     * @covers ::testClassname
+     */
+    public function testTestClassname()
+    {
+    }
+}
diff --git a/samples/server/petstore/php-slim4/test/Api/PetApiTest.php b/samples/server/petstore/php-slim4/test/Api/PetApiTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..cf70b8df024c7cd9e69cad5c96220b7a6fc427dc
--- /dev/null
+++ b/samples/server/petstore/php-slim4/test/Api/PetApiTest.php
@@ -0,0 +1,168 @@
+<?php
+/**
+ * PetApiTest
+ *
+ * PHP version 7.1
+ *
+ * @package OpenAPIServer\Api
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+
+/**
+ * OpenAPI Petstore
+ *
+ * This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\
+ * The version of the OpenAPI document: 1.0.0
+ * Generated by: https://github.com/openapitools/openapi-generator.git
+ */
+
+/**
+ * NOTE: This class is auto generated by the openapi generator program.
+ * https://github.com/openapitools/openapi-generator
+ * Please update the test case below to test the endpoint.
+ */
+namespace OpenAPIServer\Api;
+
+use PHPUnit\Framework\TestCase;
+use OpenAPIServer\Api\PetApi;
+
+/**
+ * PetApiTest Class Doc Comment
+ *
+ * @package OpenAPIServer\Api
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ *
+ * @coversDefaultClass \OpenAPIServer\Api\PetApi
+ */
+class PetApiTest extends TestCase
+{
+
+    /**
+     * Setup before running any test cases
+     */
+    public static function setUpBeforeClass()
+    {
+    }
+
+    /**
+     * Setup before running each test case
+     */
+    public function setUp()
+    {
+    }
+
+    /**
+     * Clean up after running each test case
+     */
+    public function tearDown()
+    {
+    }
+
+    /**
+     * Clean up after running all test cases
+     */
+    public static function tearDownAfterClass()
+    {
+    }
+
+    /**
+     * Test case for addPet
+     *
+     * Add a new pet to the store.
+     *
+     * @covers ::addPet
+     */
+    public function testAddPet()
+    {
+    }
+
+    /**
+     * Test case for deletePet
+     *
+     * Deletes a pet.
+     *
+     * @covers ::deletePet
+     */
+    public function testDeletePet()
+    {
+    }
+
+    /**
+     * Test case for findPetsByStatus
+     *
+     * Finds Pets by status.
+     *
+     * @covers ::findPetsByStatus
+     */
+    public function testFindPetsByStatus()
+    {
+    }
+
+    /**
+     * Test case for findPetsByTags
+     *
+     * Finds Pets by tags.
+     *
+     * @covers ::findPetsByTags
+     */
+    public function testFindPetsByTags()
+    {
+    }
+
+    /**
+     * Test case for getPetById
+     *
+     * Find pet by ID.
+     *
+     * @covers ::getPetById
+     */
+    public function testGetPetById()
+    {
+    }
+
+    /**
+     * Test case for updatePet
+     *
+     * Update an existing pet.
+     *
+     * @covers ::updatePet
+     */
+    public function testUpdatePet()
+    {
+    }
+
+    /**
+     * Test case for updatePetWithForm
+     *
+     * Updates a pet in the store with form data.
+     *
+     * @covers ::updatePetWithForm
+     */
+    public function testUpdatePetWithForm()
+    {
+    }
+
+    /**
+     * Test case for uploadFile
+     *
+     * uploads an image.
+     *
+     * @covers ::uploadFile
+     */
+    public function testUploadFile()
+    {
+    }
+
+    /**
+     * Test case for uploadFileWithRequiredFile
+     *
+     * uploads an image (required).
+     *
+     * @covers ::uploadFileWithRequiredFile
+     */
+    public function testUploadFileWithRequiredFile()
+    {
+    }
+}
diff --git a/samples/server/petstore/php-slim4/test/Api/StoreApiTest.php b/samples/server/petstore/php-slim4/test/Api/StoreApiTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..9db6b7e6ccc0099f29182aa31bb276fca54c261e
--- /dev/null
+++ b/samples/server/petstore/php-slim4/test/Api/StoreApiTest.php
@@ -0,0 +1,113 @@
+<?php
+/**
+ * StoreApiTest
+ *
+ * PHP version 7.1
+ *
+ * @package OpenAPIServer\Api
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+
+/**
+ * OpenAPI Petstore
+ *
+ * This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\
+ * The version of the OpenAPI document: 1.0.0
+ * Generated by: https://github.com/openapitools/openapi-generator.git
+ */
+
+/**
+ * NOTE: This class is auto generated by the openapi generator program.
+ * https://github.com/openapitools/openapi-generator
+ * Please update the test case below to test the endpoint.
+ */
+namespace OpenAPIServer\Api;
+
+use PHPUnit\Framework\TestCase;
+use OpenAPIServer\Api\StoreApi;
+
+/**
+ * StoreApiTest Class Doc Comment
+ *
+ * @package OpenAPIServer\Api
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ *
+ * @coversDefaultClass \OpenAPIServer\Api\StoreApi
+ */
+class StoreApiTest extends TestCase
+{
+
+    /**
+     * Setup before running any test cases
+     */
+    public static function setUpBeforeClass()
+    {
+    }
+
+    /**
+     * Setup before running each test case
+     */
+    public function setUp()
+    {
+    }
+
+    /**
+     * Clean up after running each test case
+     */
+    public function tearDown()
+    {
+    }
+
+    /**
+     * Clean up after running all test cases
+     */
+    public static function tearDownAfterClass()
+    {
+    }
+
+    /**
+     * Test case for deleteOrder
+     *
+     * Delete purchase order by ID.
+     *
+     * @covers ::deleteOrder
+     */
+    public function testDeleteOrder()
+    {
+    }
+
+    /**
+     * Test case for getInventory
+     *
+     * Returns pet inventories by status.
+     *
+     * @covers ::getInventory
+     */
+    public function testGetInventory()
+    {
+    }
+
+    /**
+     * Test case for getOrderById
+     *
+     * Find purchase order by ID.
+     *
+     * @covers ::getOrderById
+     */
+    public function testGetOrderById()
+    {
+    }
+
+    /**
+     * Test case for placeOrder
+     *
+     * Place an order for a pet.
+     *
+     * @covers ::placeOrder
+     */
+    public function testPlaceOrder()
+    {
+    }
+}
diff --git a/samples/server/petstore/php-slim4/test/Api/UserApiTest.php b/samples/server/petstore/php-slim4/test/Api/UserApiTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..6826b795e538573e2e9ad92412843b2876498f99
--- /dev/null
+++ b/samples/server/petstore/php-slim4/test/Api/UserApiTest.php
@@ -0,0 +1,157 @@
+<?php
+/**
+ * UserApiTest
+ *
+ * PHP version 7.1
+ *
+ * @package OpenAPIServer\Api
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+
+/**
+ * OpenAPI Petstore
+ *
+ * This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\
+ * The version of the OpenAPI document: 1.0.0
+ * Generated by: https://github.com/openapitools/openapi-generator.git
+ */
+
+/**
+ * NOTE: This class is auto generated by the openapi generator program.
+ * https://github.com/openapitools/openapi-generator
+ * Please update the test case below to test the endpoint.
+ */
+namespace OpenAPIServer\Api;
+
+use PHPUnit\Framework\TestCase;
+use OpenAPIServer\Api\UserApi;
+
+/**
+ * UserApiTest Class Doc Comment
+ *
+ * @package OpenAPIServer\Api
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ *
+ * @coversDefaultClass \OpenAPIServer\Api\UserApi
+ */
+class UserApiTest extends TestCase
+{
+
+    /**
+     * Setup before running any test cases
+     */
+    public static function setUpBeforeClass()
+    {
+    }
+
+    /**
+     * Setup before running each test case
+     */
+    public function setUp()
+    {
+    }
+
+    /**
+     * Clean up after running each test case
+     */
+    public function tearDown()
+    {
+    }
+
+    /**
+     * Clean up after running all test cases
+     */
+    public static function tearDownAfterClass()
+    {
+    }
+
+    /**
+     * Test case for createUser
+     *
+     * Create user.
+     *
+     * @covers ::createUser
+     */
+    public function testCreateUser()
+    {
+    }
+
+    /**
+     * Test case for createUsersWithArrayInput
+     *
+     * Creates list of users with given input array.
+     *
+     * @covers ::createUsersWithArrayInput
+     */
+    public function testCreateUsersWithArrayInput()
+    {
+    }
+
+    /**
+     * Test case for createUsersWithListInput
+     *
+     * Creates list of users with given input array.
+     *
+     * @covers ::createUsersWithListInput
+     */
+    public function testCreateUsersWithListInput()
+    {
+    }
+
+    /**
+     * Test case for deleteUser
+     *
+     * Delete user.
+     *
+     * @covers ::deleteUser
+     */
+    public function testDeleteUser()
+    {
+    }
+
+    /**
+     * Test case for getUserByName
+     *
+     * Get user by user name.
+     *
+     * @covers ::getUserByName
+     */
+    public function testGetUserByName()
+    {
+    }
+
+    /**
+     * Test case for loginUser
+     *
+     * Logs user into the system.
+     *
+     * @covers ::loginUser
+     */
+    public function testLoginUser()
+    {
+    }
+
+    /**
+     * Test case for logoutUser
+     *
+     * Logs out current logged in user session.
+     *
+     * @covers ::logoutUser
+     */
+    public function testLogoutUser()
+    {
+    }
+
+    /**
+     * Test case for updateUser
+     *
+     * Updated user.
+     *
+     * @covers ::updateUser
+     */
+    public function testUpdateUser()
+    {
+    }
+}
diff --git a/samples/server/petstore/php-slim4/test/Model/AdditionalPropertiesAnyTypeTest.php b/samples/server/petstore/php-slim4/test/Model/AdditionalPropertiesAnyTypeTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..3b06053e9b6d3235c3e8133b5df2d94a2f1a5a3e
--- /dev/null
+++ b/samples/server/petstore/php-slim4/test/Model/AdditionalPropertiesAnyTypeTest.php
@@ -0,0 +1,84 @@
+<?php
+/**
+ * AdditionalPropertiesAnyTypeTest
+ *
+ * PHP version 7.1
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+
+/**
+ * OpenAPI Petstore
+ *
+ * This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\
+ * The version of the OpenAPI document: 1.0.0
+ * Generated by: https://github.com/openapitools/openapi-generator.git
+ */
+
+/**
+ * NOTE: This class is auto generated by the openapi generator program.
+ * https://github.com/openapitools/openapi-generator
+ * Please update the test case below to test the model.
+ */
+namespace OpenAPIServer\Model;
+
+use PHPUnit\Framework\TestCase;
+use OpenAPIServer\Model\AdditionalPropertiesAnyType;
+
+/**
+ * AdditionalPropertiesAnyTypeTest Class Doc Comment
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ *
+ * @coversDefaultClass \OpenAPIServer\Model\AdditionalPropertiesAnyType
+ */
+class AdditionalPropertiesAnyTypeTest extends TestCase
+{
+
+    /**
+     * Setup before running any test cases
+     */
+    public static function setUpBeforeClass()
+    {
+    }
+
+    /**
+     * Setup before running each test case
+     */
+    public function setUp()
+    {
+    }
+
+    /**
+     * Clean up after running each test case
+     */
+    public function tearDown()
+    {
+    }
+
+    /**
+     * Clean up after running all test cases
+     */
+    public static function tearDownAfterClass()
+    {
+    }
+
+    /**
+     * Test "AdditionalPropertiesAnyType"
+     */
+    public function testAdditionalPropertiesAnyType()
+    {
+        $testAdditionalPropertiesAnyType = new AdditionalPropertiesAnyType();
+    }
+
+    /**
+     * Test attribute "name"
+     */
+    public function testPropertyName()
+    {
+    }
+}
diff --git a/samples/server/petstore/php-slim4/test/Model/AdditionalPropertiesArrayTest.php b/samples/server/petstore/php-slim4/test/Model/AdditionalPropertiesArrayTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..17d98cf4133da982b94a5d6712ad095534b0ad26
--- /dev/null
+++ b/samples/server/petstore/php-slim4/test/Model/AdditionalPropertiesArrayTest.php
@@ -0,0 +1,84 @@
+<?php
+/**
+ * AdditionalPropertiesArrayTest
+ *
+ * PHP version 7.1
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+
+/**
+ * OpenAPI Petstore
+ *
+ * This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\
+ * The version of the OpenAPI document: 1.0.0
+ * Generated by: https://github.com/openapitools/openapi-generator.git
+ */
+
+/**
+ * NOTE: This class is auto generated by the openapi generator program.
+ * https://github.com/openapitools/openapi-generator
+ * Please update the test case below to test the model.
+ */
+namespace OpenAPIServer\Model;
+
+use PHPUnit\Framework\TestCase;
+use OpenAPIServer\Model\AdditionalPropertiesArray;
+
+/**
+ * AdditionalPropertiesArrayTest Class Doc Comment
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ *
+ * @coversDefaultClass \OpenAPIServer\Model\AdditionalPropertiesArray
+ */
+class AdditionalPropertiesArrayTest extends TestCase
+{
+
+    /**
+     * Setup before running any test cases
+     */
+    public static function setUpBeforeClass()
+    {
+    }
+
+    /**
+     * Setup before running each test case
+     */
+    public function setUp()
+    {
+    }
+
+    /**
+     * Clean up after running each test case
+     */
+    public function tearDown()
+    {
+    }
+
+    /**
+     * Clean up after running all test cases
+     */
+    public static function tearDownAfterClass()
+    {
+    }
+
+    /**
+     * Test "AdditionalPropertiesArray"
+     */
+    public function testAdditionalPropertiesArray()
+    {
+        $testAdditionalPropertiesArray = new AdditionalPropertiesArray();
+    }
+
+    /**
+     * Test attribute "name"
+     */
+    public function testPropertyName()
+    {
+    }
+}
diff --git a/samples/server/petstore/php-slim4/test/Model/AdditionalPropertiesBooleanTest.php b/samples/server/petstore/php-slim4/test/Model/AdditionalPropertiesBooleanTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..33c7083030f6bed0b46c5d9be7fdd6c9bfe733e3
--- /dev/null
+++ b/samples/server/petstore/php-slim4/test/Model/AdditionalPropertiesBooleanTest.php
@@ -0,0 +1,84 @@
+<?php
+/**
+ * AdditionalPropertiesBooleanTest
+ *
+ * PHP version 7.1
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+
+/**
+ * OpenAPI Petstore
+ *
+ * This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\
+ * The version of the OpenAPI document: 1.0.0
+ * Generated by: https://github.com/openapitools/openapi-generator.git
+ */
+
+/**
+ * NOTE: This class is auto generated by the openapi generator program.
+ * https://github.com/openapitools/openapi-generator
+ * Please update the test case below to test the model.
+ */
+namespace OpenAPIServer\Model;
+
+use PHPUnit\Framework\TestCase;
+use OpenAPIServer\Model\AdditionalPropertiesBoolean;
+
+/**
+ * AdditionalPropertiesBooleanTest Class Doc Comment
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ *
+ * @coversDefaultClass \OpenAPIServer\Model\AdditionalPropertiesBoolean
+ */
+class AdditionalPropertiesBooleanTest extends TestCase
+{
+
+    /**
+     * Setup before running any test cases
+     */
+    public static function setUpBeforeClass()
+    {
+    }
+
+    /**
+     * Setup before running each test case
+     */
+    public function setUp()
+    {
+    }
+
+    /**
+     * Clean up after running each test case
+     */
+    public function tearDown()
+    {
+    }
+
+    /**
+     * Clean up after running all test cases
+     */
+    public static function tearDownAfterClass()
+    {
+    }
+
+    /**
+     * Test "AdditionalPropertiesBoolean"
+     */
+    public function testAdditionalPropertiesBoolean()
+    {
+        $testAdditionalPropertiesBoolean = new AdditionalPropertiesBoolean();
+    }
+
+    /**
+     * Test attribute "name"
+     */
+    public function testPropertyName()
+    {
+    }
+}
diff --git a/samples/server/petstore/php-slim4/test/Model/AdditionalPropertiesClassTest.php b/samples/server/petstore/php-slim4/test/Model/AdditionalPropertiesClassTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..087a08983c7e184cb2d113aed2b9757dd20da2bc
--- /dev/null
+++ b/samples/server/petstore/php-slim4/test/Model/AdditionalPropertiesClassTest.php
@@ -0,0 +1,154 @@
+<?php
+/**
+ * AdditionalPropertiesClassTest
+ *
+ * PHP version 7.1
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+
+/**
+ * OpenAPI Petstore
+ *
+ * This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\
+ * The version of the OpenAPI document: 1.0.0
+ * Generated by: https://github.com/openapitools/openapi-generator.git
+ */
+
+/**
+ * NOTE: This class is auto generated by the openapi generator program.
+ * https://github.com/openapitools/openapi-generator
+ * Please update the test case below to test the model.
+ */
+namespace OpenAPIServer\Model;
+
+use PHPUnit\Framework\TestCase;
+use OpenAPIServer\Model\AdditionalPropertiesClass;
+
+/**
+ * AdditionalPropertiesClassTest Class Doc Comment
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ *
+ * @coversDefaultClass \OpenAPIServer\Model\AdditionalPropertiesClass
+ */
+class AdditionalPropertiesClassTest extends TestCase
+{
+
+    /**
+     * Setup before running any test cases
+     */
+    public static function setUpBeforeClass()
+    {
+    }
+
+    /**
+     * Setup before running each test case
+     */
+    public function setUp()
+    {
+    }
+
+    /**
+     * Clean up after running each test case
+     */
+    public function tearDown()
+    {
+    }
+
+    /**
+     * Clean up after running all test cases
+     */
+    public static function tearDownAfterClass()
+    {
+    }
+
+    /**
+     * Test "AdditionalPropertiesClass"
+     */
+    public function testAdditionalPropertiesClass()
+    {
+        $testAdditionalPropertiesClass = new AdditionalPropertiesClass();
+    }
+
+    /**
+     * Test attribute "mapString"
+     */
+    public function testPropertyMapString()
+    {
+    }
+
+    /**
+     * Test attribute "mapNumber"
+     */
+    public function testPropertyMapNumber()
+    {
+    }
+
+    /**
+     * Test attribute "mapInteger"
+     */
+    public function testPropertyMapInteger()
+    {
+    }
+
+    /**
+     * Test attribute "mapBoolean"
+     */
+    public function testPropertyMapBoolean()
+    {
+    }
+
+    /**
+     * Test attribute "mapArrayInteger"
+     */
+    public function testPropertyMapArrayInteger()
+    {
+    }
+
+    /**
+     * Test attribute "mapArrayAnytype"
+     */
+    public function testPropertyMapArrayAnytype()
+    {
+    }
+
+    /**
+     * Test attribute "mapMapString"
+     */
+    public function testPropertyMapMapString()
+    {
+    }
+
+    /**
+     * Test attribute "mapMapAnytype"
+     */
+    public function testPropertyMapMapAnytype()
+    {
+    }
+
+    /**
+     * Test attribute "anytype1"
+     */
+    public function testPropertyAnytype1()
+    {
+    }
+
+    /**
+     * Test attribute "anytype2"
+     */
+    public function testPropertyAnytype2()
+    {
+    }
+
+    /**
+     * Test attribute "anytype3"
+     */
+    public function testPropertyAnytype3()
+    {
+    }
+}
diff --git a/samples/server/petstore/php-slim4/test/Model/AdditionalPropertiesIntegerTest.php b/samples/server/petstore/php-slim4/test/Model/AdditionalPropertiesIntegerTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..e6029e627402c4f71b4c1953ec844aef6281e00e
--- /dev/null
+++ b/samples/server/petstore/php-slim4/test/Model/AdditionalPropertiesIntegerTest.php
@@ -0,0 +1,84 @@
+<?php
+/**
+ * AdditionalPropertiesIntegerTest
+ *
+ * PHP version 7.1
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+
+/**
+ * OpenAPI Petstore
+ *
+ * This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\
+ * The version of the OpenAPI document: 1.0.0
+ * Generated by: https://github.com/openapitools/openapi-generator.git
+ */
+
+/**
+ * NOTE: This class is auto generated by the openapi generator program.
+ * https://github.com/openapitools/openapi-generator
+ * Please update the test case below to test the model.
+ */
+namespace OpenAPIServer\Model;
+
+use PHPUnit\Framework\TestCase;
+use OpenAPIServer\Model\AdditionalPropertiesInteger;
+
+/**
+ * AdditionalPropertiesIntegerTest Class Doc Comment
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ *
+ * @coversDefaultClass \OpenAPIServer\Model\AdditionalPropertiesInteger
+ */
+class AdditionalPropertiesIntegerTest extends TestCase
+{
+
+    /**
+     * Setup before running any test cases
+     */
+    public static function setUpBeforeClass()
+    {
+    }
+
+    /**
+     * Setup before running each test case
+     */
+    public function setUp()
+    {
+    }
+
+    /**
+     * Clean up after running each test case
+     */
+    public function tearDown()
+    {
+    }
+
+    /**
+     * Clean up after running all test cases
+     */
+    public static function tearDownAfterClass()
+    {
+    }
+
+    /**
+     * Test "AdditionalPropertiesInteger"
+     */
+    public function testAdditionalPropertiesInteger()
+    {
+        $testAdditionalPropertiesInteger = new AdditionalPropertiesInteger();
+    }
+
+    /**
+     * Test attribute "name"
+     */
+    public function testPropertyName()
+    {
+    }
+}
diff --git a/samples/server/petstore/php-slim4/test/Model/AdditionalPropertiesNumberTest.php b/samples/server/petstore/php-slim4/test/Model/AdditionalPropertiesNumberTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..2ce7a4e5771aab9238a7acb4c8e6aebf8bfae102
--- /dev/null
+++ b/samples/server/petstore/php-slim4/test/Model/AdditionalPropertiesNumberTest.php
@@ -0,0 +1,84 @@
+<?php
+/**
+ * AdditionalPropertiesNumberTest
+ *
+ * PHP version 7.1
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+
+/**
+ * OpenAPI Petstore
+ *
+ * This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\
+ * The version of the OpenAPI document: 1.0.0
+ * Generated by: https://github.com/openapitools/openapi-generator.git
+ */
+
+/**
+ * NOTE: This class is auto generated by the openapi generator program.
+ * https://github.com/openapitools/openapi-generator
+ * Please update the test case below to test the model.
+ */
+namespace OpenAPIServer\Model;
+
+use PHPUnit\Framework\TestCase;
+use OpenAPIServer\Model\AdditionalPropertiesNumber;
+
+/**
+ * AdditionalPropertiesNumberTest Class Doc Comment
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ *
+ * @coversDefaultClass \OpenAPIServer\Model\AdditionalPropertiesNumber
+ */
+class AdditionalPropertiesNumberTest extends TestCase
+{
+
+    /**
+     * Setup before running any test cases
+     */
+    public static function setUpBeforeClass()
+    {
+    }
+
+    /**
+     * Setup before running each test case
+     */
+    public function setUp()
+    {
+    }
+
+    /**
+     * Clean up after running each test case
+     */
+    public function tearDown()
+    {
+    }
+
+    /**
+     * Clean up after running all test cases
+     */
+    public static function tearDownAfterClass()
+    {
+    }
+
+    /**
+     * Test "AdditionalPropertiesNumber"
+     */
+    public function testAdditionalPropertiesNumber()
+    {
+        $testAdditionalPropertiesNumber = new AdditionalPropertiesNumber();
+    }
+
+    /**
+     * Test attribute "name"
+     */
+    public function testPropertyName()
+    {
+    }
+}
diff --git a/samples/server/petstore/php-slim4/test/Model/AdditionalPropertiesObjectTest.php b/samples/server/petstore/php-slim4/test/Model/AdditionalPropertiesObjectTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..00fc5c228613cda49f0d9143f73c93c6df2cccc7
--- /dev/null
+++ b/samples/server/petstore/php-slim4/test/Model/AdditionalPropertiesObjectTest.php
@@ -0,0 +1,84 @@
+<?php
+/**
+ * AdditionalPropertiesObjectTest
+ *
+ * PHP version 7.1
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+
+/**
+ * OpenAPI Petstore
+ *
+ * This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\
+ * The version of the OpenAPI document: 1.0.0
+ * Generated by: https://github.com/openapitools/openapi-generator.git
+ */
+
+/**
+ * NOTE: This class is auto generated by the openapi generator program.
+ * https://github.com/openapitools/openapi-generator
+ * Please update the test case below to test the model.
+ */
+namespace OpenAPIServer\Model;
+
+use PHPUnit\Framework\TestCase;
+use OpenAPIServer\Model\AdditionalPropertiesObject;
+
+/**
+ * AdditionalPropertiesObjectTest Class Doc Comment
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ *
+ * @coversDefaultClass \OpenAPIServer\Model\AdditionalPropertiesObject
+ */
+class AdditionalPropertiesObjectTest extends TestCase
+{
+
+    /**
+     * Setup before running any test cases
+     */
+    public static function setUpBeforeClass()
+    {
+    }
+
+    /**
+     * Setup before running each test case
+     */
+    public function setUp()
+    {
+    }
+
+    /**
+     * Clean up after running each test case
+     */
+    public function tearDown()
+    {
+    }
+
+    /**
+     * Clean up after running all test cases
+     */
+    public static function tearDownAfterClass()
+    {
+    }
+
+    /**
+     * Test "AdditionalPropertiesObject"
+     */
+    public function testAdditionalPropertiesObject()
+    {
+        $testAdditionalPropertiesObject = new AdditionalPropertiesObject();
+    }
+
+    /**
+     * Test attribute "name"
+     */
+    public function testPropertyName()
+    {
+    }
+}
diff --git a/samples/server/petstore/php-slim4/test/Model/AdditionalPropertiesStringTest.php b/samples/server/petstore/php-slim4/test/Model/AdditionalPropertiesStringTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..52f1026ef6be8cb45a79f91b4d20b3f27a51f452
--- /dev/null
+++ b/samples/server/petstore/php-slim4/test/Model/AdditionalPropertiesStringTest.php
@@ -0,0 +1,84 @@
+<?php
+/**
+ * AdditionalPropertiesStringTest
+ *
+ * PHP version 7.1
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+
+/**
+ * OpenAPI Petstore
+ *
+ * This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\
+ * The version of the OpenAPI document: 1.0.0
+ * Generated by: https://github.com/openapitools/openapi-generator.git
+ */
+
+/**
+ * NOTE: This class is auto generated by the openapi generator program.
+ * https://github.com/openapitools/openapi-generator
+ * Please update the test case below to test the model.
+ */
+namespace OpenAPIServer\Model;
+
+use PHPUnit\Framework\TestCase;
+use OpenAPIServer\Model\AdditionalPropertiesString;
+
+/**
+ * AdditionalPropertiesStringTest Class Doc Comment
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ *
+ * @coversDefaultClass \OpenAPIServer\Model\AdditionalPropertiesString
+ */
+class AdditionalPropertiesStringTest extends TestCase
+{
+
+    /**
+     * Setup before running any test cases
+     */
+    public static function setUpBeforeClass()
+    {
+    }
+
+    /**
+     * Setup before running each test case
+     */
+    public function setUp()
+    {
+    }
+
+    /**
+     * Clean up after running each test case
+     */
+    public function tearDown()
+    {
+    }
+
+    /**
+     * Clean up after running all test cases
+     */
+    public static function tearDownAfterClass()
+    {
+    }
+
+    /**
+     * Test "AdditionalPropertiesString"
+     */
+    public function testAdditionalPropertiesString()
+    {
+        $testAdditionalPropertiesString = new AdditionalPropertiesString();
+    }
+
+    /**
+     * Test attribute "name"
+     */
+    public function testPropertyName()
+    {
+    }
+}
diff --git a/samples/server/petstore/php-slim4/test/Model/AnimalTest.php b/samples/server/petstore/php-slim4/test/Model/AnimalTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..182e956e7b7cde35b1bd8d3b08f5f7e2a5014fad
--- /dev/null
+++ b/samples/server/petstore/php-slim4/test/Model/AnimalTest.php
@@ -0,0 +1,91 @@
+<?php
+/**
+ * AnimalTest
+ *
+ * PHP version 7.1
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+
+/**
+ * OpenAPI Petstore
+ *
+ * This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\
+ * The version of the OpenAPI document: 1.0.0
+ * Generated by: https://github.com/openapitools/openapi-generator.git
+ */
+
+/**
+ * NOTE: This class is auto generated by the openapi generator program.
+ * https://github.com/openapitools/openapi-generator
+ * Please update the test case below to test the model.
+ */
+namespace OpenAPIServer\Model;
+
+use PHPUnit\Framework\TestCase;
+use OpenAPIServer\Model\Animal;
+
+/**
+ * AnimalTest Class Doc Comment
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ *
+ * @coversDefaultClass \OpenAPIServer\Model\Animal
+ */
+class AnimalTest extends TestCase
+{
+
+    /**
+     * Setup before running any test cases
+     */
+    public static function setUpBeforeClass()
+    {
+    }
+
+    /**
+     * Setup before running each test case
+     */
+    public function setUp()
+    {
+    }
+
+    /**
+     * Clean up after running each test case
+     */
+    public function tearDown()
+    {
+    }
+
+    /**
+     * Clean up after running all test cases
+     */
+    public static function tearDownAfterClass()
+    {
+    }
+
+    /**
+     * Test "Animal"
+     */
+    public function testAnimal()
+    {
+        $testAnimal = new Animal();
+    }
+
+    /**
+     * Test attribute "className"
+     */
+    public function testPropertyClassName()
+    {
+    }
+
+    /**
+     * Test attribute "color"
+     */
+    public function testPropertyColor()
+    {
+    }
+}
diff --git a/samples/server/petstore/php-slim4/test/Model/ApiResponseTest.php b/samples/server/petstore/php-slim4/test/Model/ApiResponseTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..ca5fd86c7d383247b0c723225d11cc69cbc02e9d
--- /dev/null
+++ b/samples/server/petstore/php-slim4/test/Model/ApiResponseTest.php
@@ -0,0 +1,98 @@
+<?php
+/**
+ * ApiResponseTest
+ *
+ * PHP version 7.1
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+
+/**
+ * OpenAPI Petstore
+ *
+ * This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\
+ * The version of the OpenAPI document: 1.0.0
+ * Generated by: https://github.com/openapitools/openapi-generator.git
+ */
+
+/**
+ * NOTE: This class is auto generated by the openapi generator program.
+ * https://github.com/openapitools/openapi-generator
+ * Please update the test case below to test the model.
+ */
+namespace OpenAPIServer\Model;
+
+use PHPUnit\Framework\TestCase;
+use OpenAPIServer\Model\ApiResponse;
+
+/**
+ * ApiResponseTest Class Doc Comment
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ *
+ * @coversDefaultClass \OpenAPIServer\Model\ApiResponse
+ */
+class ApiResponseTest extends TestCase
+{
+
+    /**
+     * Setup before running any test cases
+     */
+    public static function setUpBeforeClass()
+    {
+    }
+
+    /**
+     * Setup before running each test case
+     */
+    public function setUp()
+    {
+    }
+
+    /**
+     * Clean up after running each test case
+     */
+    public function tearDown()
+    {
+    }
+
+    /**
+     * Clean up after running all test cases
+     */
+    public static function tearDownAfterClass()
+    {
+    }
+
+    /**
+     * Test "ApiResponse"
+     */
+    public function testApiResponse()
+    {
+        $testApiResponse = new ApiResponse();
+    }
+
+    /**
+     * Test attribute "code"
+     */
+    public function testPropertyCode()
+    {
+    }
+
+    /**
+     * Test attribute "type"
+     */
+    public function testPropertyType()
+    {
+    }
+
+    /**
+     * Test attribute "message"
+     */
+    public function testPropertyMessage()
+    {
+    }
+}
diff --git a/samples/server/petstore/php-slim4/test/Model/ArrayOfArrayOfNumberOnlyTest.php b/samples/server/petstore/php-slim4/test/Model/ArrayOfArrayOfNumberOnlyTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..5ec399899f718a501a2fe20487ca639b3827748a
--- /dev/null
+++ b/samples/server/petstore/php-slim4/test/Model/ArrayOfArrayOfNumberOnlyTest.php
@@ -0,0 +1,84 @@
+<?php
+/**
+ * ArrayOfArrayOfNumberOnlyTest
+ *
+ * PHP version 7.1
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+
+/**
+ * OpenAPI Petstore
+ *
+ * This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\
+ * The version of the OpenAPI document: 1.0.0
+ * Generated by: https://github.com/openapitools/openapi-generator.git
+ */
+
+/**
+ * NOTE: This class is auto generated by the openapi generator program.
+ * https://github.com/openapitools/openapi-generator
+ * Please update the test case below to test the model.
+ */
+namespace OpenAPIServer\Model;
+
+use PHPUnit\Framework\TestCase;
+use OpenAPIServer\Model\ArrayOfArrayOfNumberOnly;
+
+/**
+ * ArrayOfArrayOfNumberOnlyTest Class Doc Comment
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ *
+ * @coversDefaultClass \OpenAPIServer\Model\ArrayOfArrayOfNumberOnly
+ */
+class ArrayOfArrayOfNumberOnlyTest extends TestCase
+{
+
+    /**
+     * Setup before running any test cases
+     */
+    public static function setUpBeforeClass()
+    {
+    }
+
+    /**
+     * Setup before running each test case
+     */
+    public function setUp()
+    {
+    }
+
+    /**
+     * Clean up after running each test case
+     */
+    public function tearDown()
+    {
+    }
+
+    /**
+     * Clean up after running all test cases
+     */
+    public static function tearDownAfterClass()
+    {
+    }
+
+    /**
+     * Test "ArrayOfArrayOfNumberOnly"
+     */
+    public function testArrayOfArrayOfNumberOnly()
+    {
+        $testArrayOfArrayOfNumberOnly = new ArrayOfArrayOfNumberOnly();
+    }
+
+    /**
+     * Test attribute "arrayArrayNumber"
+     */
+    public function testPropertyArrayArrayNumber()
+    {
+    }
+}
diff --git a/samples/server/petstore/php-slim4/test/Model/ArrayOfNumberOnlyTest.php b/samples/server/petstore/php-slim4/test/Model/ArrayOfNumberOnlyTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..a725d572b7867e776d1ecdfb3c12642c0c4f450f
--- /dev/null
+++ b/samples/server/petstore/php-slim4/test/Model/ArrayOfNumberOnlyTest.php
@@ -0,0 +1,84 @@
+<?php
+/**
+ * ArrayOfNumberOnlyTest
+ *
+ * PHP version 7.1
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+
+/**
+ * OpenAPI Petstore
+ *
+ * This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\
+ * The version of the OpenAPI document: 1.0.0
+ * Generated by: https://github.com/openapitools/openapi-generator.git
+ */
+
+/**
+ * NOTE: This class is auto generated by the openapi generator program.
+ * https://github.com/openapitools/openapi-generator
+ * Please update the test case below to test the model.
+ */
+namespace OpenAPIServer\Model;
+
+use PHPUnit\Framework\TestCase;
+use OpenAPIServer\Model\ArrayOfNumberOnly;
+
+/**
+ * ArrayOfNumberOnlyTest Class Doc Comment
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ *
+ * @coversDefaultClass \OpenAPIServer\Model\ArrayOfNumberOnly
+ */
+class ArrayOfNumberOnlyTest extends TestCase
+{
+
+    /**
+     * Setup before running any test cases
+     */
+    public static function setUpBeforeClass()
+    {
+    }
+
+    /**
+     * Setup before running each test case
+     */
+    public function setUp()
+    {
+    }
+
+    /**
+     * Clean up after running each test case
+     */
+    public function tearDown()
+    {
+    }
+
+    /**
+     * Clean up after running all test cases
+     */
+    public static function tearDownAfterClass()
+    {
+    }
+
+    /**
+     * Test "ArrayOfNumberOnly"
+     */
+    public function testArrayOfNumberOnly()
+    {
+        $testArrayOfNumberOnly = new ArrayOfNumberOnly();
+    }
+
+    /**
+     * Test attribute "arrayNumber"
+     */
+    public function testPropertyArrayNumber()
+    {
+    }
+}
diff --git a/samples/server/petstore/php-slim4/test/Model/ArrayTestTest.php b/samples/server/petstore/php-slim4/test/Model/ArrayTestTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..1ab21cdfbd0d56cc83c21c78fffc34c9bc855f57
--- /dev/null
+++ b/samples/server/petstore/php-slim4/test/Model/ArrayTestTest.php
@@ -0,0 +1,98 @@
+<?php
+/**
+ * ArrayTestTest
+ *
+ * PHP version 7.1
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+
+/**
+ * OpenAPI Petstore
+ *
+ * This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\
+ * The version of the OpenAPI document: 1.0.0
+ * Generated by: https://github.com/openapitools/openapi-generator.git
+ */
+
+/**
+ * NOTE: This class is auto generated by the openapi generator program.
+ * https://github.com/openapitools/openapi-generator
+ * Please update the test case below to test the model.
+ */
+namespace OpenAPIServer\Model;
+
+use PHPUnit\Framework\TestCase;
+use OpenAPIServer\Model\ArrayTest;
+
+/**
+ * ArrayTestTest Class Doc Comment
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ *
+ * @coversDefaultClass \OpenAPIServer\Model\ArrayTest
+ */
+class ArrayTestTest extends TestCase
+{
+
+    /**
+     * Setup before running any test cases
+     */
+    public static function setUpBeforeClass()
+    {
+    }
+
+    /**
+     * Setup before running each test case
+     */
+    public function setUp()
+    {
+    }
+
+    /**
+     * Clean up after running each test case
+     */
+    public function tearDown()
+    {
+    }
+
+    /**
+     * Clean up after running all test cases
+     */
+    public static function tearDownAfterClass()
+    {
+    }
+
+    /**
+     * Test "ArrayTest"
+     */
+    public function testArrayTest()
+    {
+        $testArrayTest = new ArrayTest();
+    }
+
+    /**
+     * Test attribute "arrayOfString"
+     */
+    public function testPropertyArrayOfString()
+    {
+    }
+
+    /**
+     * Test attribute "arrayArrayOfInteger"
+     */
+    public function testPropertyArrayArrayOfInteger()
+    {
+    }
+
+    /**
+     * Test attribute "arrayArrayOfModel"
+     */
+    public function testPropertyArrayArrayOfModel()
+    {
+    }
+}
diff --git a/samples/server/petstore/php-slim4/test/Model/CapitalizationTest.php b/samples/server/petstore/php-slim4/test/Model/CapitalizationTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..5a06545a461143fdcf9448fd54b6ef662f546eb1
--- /dev/null
+++ b/samples/server/petstore/php-slim4/test/Model/CapitalizationTest.php
@@ -0,0 +1,119 @@
+<?php
+/**
+ * CapitalizationTest
+ *
+ * PHP version 7.1
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+
+/**
+ * OpenAPI Petstore
+ *
+ * This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\
+ * The version of the OpenAPI document: 1.0.0
+ * Generated by: https://github.com/openapitools/openapi-generator.git
+ */
+
+/**
+ * NOTE: This class is auto generated by the openapi generator program.
+ * https://github.com/openapitools/openapi-generator
+ * Please update the test case below to test the model.
+ */
+namespace OpenAPIServer\Model;
+
+use PHPUnit\Framework\TestCase;
+use OpenAPIServer\Model\Capitalization;
+
+/**
+ * CapitalizationTest Class Doc Comment
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ *
+ * @coversDefaultClass \OpenAPIServer\Model\Capitalization
+ */
+class CapitalizationTest extends TestCase
+{
+
+    /**
+     * Setup before running any test cases
+     */
+    public static function setUpBeforeClass()
+    {
+    }
+
+    /**
+     * Setup before running each test case
+     */
+    public function setUp()
+    {
+    }
+
+    /**
+     * Clean up after running each test case
+     */
+    public function tearDown()
+    {
+    }
+
+    /**
+     * Clean up after running all test cases
+     */
+    public static function tearDownAfterClass()
+    {
+    }
+
+    /**
+     * Test "Capitalization"
+     */
+    public function testCapitalization()
+    {
+        $testCapitalization = new Capitalization();
+    }
+
+    /**
+     * Test attribute "smallCamel"
+     */
+    public function testPropertySmallCamel()
+    {
+    }
+
+    /**
+     * Test attribute "capitalCamel"
+     */
+    public function testPropertyCapitalCamel()
+    {
+    }
+
+    /**
+     * Test attribute "smallSnake"
+     */
+    public function testPropertySmallSnake()
+    {
+    }
+
+    /**
+     * Test attribute "capitalSnake"
+     */
+    public function testPropertyCapitalSnake()
+    {
+    }
+
+    /**
+     * Test attribute "sCAETHFlowPoints"
+     */
+    public function testPropertySCAETHFlowPoints()
+    {
+    }
+
+    /**
+     * Test attribute "aTTNAME"
+     */
+    public function testPropertyATTNAME()
+    {
+    }
+}
diff --git a/samples/server/petstore/php-slim4/test/Model/CatAllOfTest.php b/samples/server/petstore/php-slim4/test/Model/CatAllOfTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..c788d1ecf7ce499ea17078943b9d6afd66dd74b3
--- /dev/null
+++ b/samples/server/petstore/php-slim4/test/Model/CatAllOfTest.php
@@ -0,0 +1,84 @@
+<?php
+/**
+ * CatAllOfTest
+ *
+ * PHP version 7.1
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+
+/**
+ * OpenAPI Petstore
+ *
+ * This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\
+ * The version of the OpenAPI document: 1.0.0
+ * Generated by: https://github.com/openapitools/openapi-generator.git
+ */
+
+/**
+ * NOTE: This class is auto generated by the openapi generator program.
+ * https://github.com/openapitools/openapi-generator
+ * Please update the test case below to test the model.
+ */
+namespace OpenAPIServer\Model;
+
+use PHPUnit\Framework\TestCase;
+use OpenAPIServer\Model\CatAllOf;
+
+/**
+ * CatAllOfTest Class Doc Comment
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ *
+ * @coversDefaultClass \OpenAPIServer\Model\CatAllOf
+ */
+class CatAllOfTest extends TestCase
+{
+
+    /**
+     * Setup before running any test cases
+     */
+    public static function setUpBeforeClass()
+    {
+    }
+
+    /**
+     * Setup before running each test case
+     */
+    public function setUp()
+    {
+    }
+
+    /**
+     * Clean up after running each test case
+     */
+    public function tearDown()
+    {
+    }
+
+    /**
+     * Clean up after running all test cases
+     */
+    public static function tearDownAfterClass()
+    {
+    }
+
+    /**
+     * Test "CatAllOf"
+     */
+    public function testCatAllOf()
+    {
+        $testCatAllOf = new CatAllOf();
+    }
+
+    /**
+     * Test attribute "declawed"
+     */
+    public function testPropertyDeclawed()
+    {
+    }
+}
diff --git a/samples/server/petstore/php-slim4/test/Model/CatTest.php b/samples/server/petstore/php-slim4/test/Model/CatTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..8220297e4ae9ebbfeb1396689c9bfc68e4698aa8
--- /dev/null
+++ b/samples/server/petstore/php-slim4/test/Model/CatTest.php
@@ -0,0 +1,98 @@
+<?php
+/**
+ * CatTest
+ *
+ * PHP version 7.1
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+
+/**
+ * OpenAPI Petstore
+ *
+ * This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\
+ * The version of the OpenAPI document: 1.0.0
+ * Generated by: https://github.com/openapitools/openapi-generator.git
+ */
+
+/**
+ * NOTE: This class is auto generated by the openapi generator program.
+ * https://github.com/openapitools/openapi-generator
+ * Please update the test case below to test the model.
+ */
+namespace OpenAPIServer\Model;
+
+use PHPUnit\Framework\TestCase;
+use OpenAPIServer\Model\Cat;
+
+/**
+ * CatTest Class Doc Comment
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ *
+ * @coversDefaultClass \OpenAPIServer\Model\Cat
+ */
+class CatTest extends TestCase
+{
+
+    /**
+     * Setup before running any test cases
+     */
+    public static function setUpBeforeClass()
+    {
+    }
+
+    /**
+     * Setup before running each test case
+     */
+    public function setUp()
+    {
+    }
+
+    /**
+     * Clean up after running each test case
+     */
+    public function tearDown()
+    {
+    }
+
+    /**
+     * Clean up after running all test cases
+     */
+    public static function tearDownAfterClass()
+    {
+    }
+
+    /**
+     * Test "Cat"
+     */
+    public function testCat()
+    {
+        $testCat = new Cat();
+    }
+
+    /**
+     * Test attribute "className"
+     */
+    public function testPropertyClassName()
+    {
+    }
+
+    /**
+     * Test attribute "color"
+     */
+    public function testPropertyColor()
+    {
+    }
+
+    /**
+     * Test attribute "declawed"
+     */
+    public function testPropertyDeclawed()
+    {
+    }
+}
diff --git a/samples/server/petstore/php-slim4/test/Model/CategoryTest.php b/samples/server/petstore/php-slim4/test/Model/CategoryTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..405ddee92555989a9321b686e608982c2954aefc
--- /dev/null
+++ b/samples/server/petstore/php-slim4/test/Model/CategoryTest.php
@@ -0,0 +1,91 @@
+<?php
+/**
+ * CategoryTest
+ *
+ * PHP version 7.1
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+
+/**
+ * OpenAPI Petstore
+ *
+ * This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\
+ * The version of the OpenAPI document: 1.0.0
+ * Generated by: https://github.com/openapitools/openapi-generator.git
+ */
+
+/**
+ * NOTE: This class is auto generated by the openapi generator program.
+ * https://github.com/openapitools/openapi-generator
+ * Please update the test case below to test the model.
+ */
+namespace OpenAPIServer\Model;
+
+use PHPUnit\Framework\TestCase;
+use OpenAPIServer\Model\Category;
+
+/**
+ * CategoryTest Class Doc Comment
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ *
+ * @coversDefaultClass \OpenAPIServer\Model\Category
+ */
+class CategoryTest extends TestCase
+{
+
+    /**
+     * Setup before running any test cases
+     */
+    public static function setUpBeforeClass()
+    {
+    }
+
+    /**
+     * Setup before running each test case
+     */
+    public function setUp()
+    {
+    }
+
+    /**
+     * Clean up after running each test case
+     */
+    public function tearDown()
+    {
+    }
+
+    /**
+     * Clean up after running all test cases
+     */
+    public static function tearDownAfterClass()
+    {
+    }
+
+    /**
+     * Test "Category"
+     */
+    public function testCategory()
+    {
+        $testCategory = new Category();
+    }
+
+    /**
+     * Test attribute "id"
+     */
+    public function testPropertyId()
+    {
+    }
+
+    /**
+     * Test attribute "name"
+     */
+    public function testPropertyName()
+    {
+    }
+}
diff --git a/samples/server/petstore/php-slim4/test/Model/ClassModelTest.php b/samples/server/petstore/php-slim4/test/Model/ClassModelTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..96a4f33687e729df8cfa9f22a720ba5dde388a00
--- /dev/null
+++ b/samples/server/petstore/php-slim4/test/Model/ClassModelTest.php
@@ -0,0 +1,84 @@
+<?php
+/**
+ * ClassModelTest
+ *
+ * PHP version 7.1
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+
+/**
+ * OpenAPI Petstore
+ *
+ * This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\
+ * The version of the OpenAPI document: 1.0.0
+ * Generated by: https://github.com/openapitools/openapi-generator.git
+ */
+
+/**
+ * NOTE: This class is auto generated by the openapi generator program.
+ * https://github.com/openapitools/openapi-generator
+ * Please update the test case below to test the model.
+ */
+namespace OpenAPIServer\Model;
+
+use PHPUnit\Framework\TestCase;
+use OpenAPIServer\Model\ClassModel;
+
+/**
+ * ClassModelTest Class Doc Comment
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ *
+ * @coversDefaultClass \OpenAPIServer\Model\ClassModel
+ */
+class ClassModelTest extends TestCase
+{
+
+    /**
+     * Setup before running any test cases
+     */
+    public static function setUpBeforeClass()
+    {
+    }
+
+    /**
+     * Setup before running each test case
+     */
+    public function setUp()
+    {
+    }
+
+    /**
+     * Clean up after running each test case
+     */
+    public function tearDown()
+    {
+    }
+
+    /**
+     * Clean up after running all test cases
+     */
+    public static function tearDownAfterClass()
+    {
+    }
+
+    /**
+     * Test "ClassModel"
+     */
+    public function testClassModel()
+    {
+        $testClassModel = new ClassModel();
+    }
+
+    /**
+     * Test attribute "class"
+     */
+    public function testPropertyClass()
+    {
+    }
+}
diff --git a/samples/server/petstore/php-slim4/test/Model/ClientTest.php b/samples/server/petstore/php-slim4/test/Model/ClientTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..6c2fae5bca927e9cfe969fd203aa94c93773eae8
--- /dev/null
+++ b/samples/server/petstore/php-slim4/test/Model/ClientTest.php
@@ -0,0 +1,84 @@
+<?php
+/**
+ * ClientTest
+ *
+ * PHP version 7.1
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+
+/**
+ * OpenAPI Petstore
+ *
+ * This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\
+ * The version of the OpenAPI document: 1.0.0
+ * Generated by: https://github.com/openapitools/openapi-generator.git
+ */
+
+/**
+ * NOTE: This class is auto generated by the openapi generator program.
+ * https://github.com/openapitools/openapi-generator
+ * Please update the test case below to test the model.
+ */
+namespace OpenAPIServer\Model;
+
+use PHPUnit\Framework\TestCase;
+use OpenAPIServer\Model\Client;
+
+/**
+ * ClientTest Class Doc Comment
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ *
+ * @coversDefaultClass \OpenAPIServer\Model\Client
+ */
+class ClientTest extends TestCase
+{
+
+    /**
+     * Setup before running any test cases
+     */
+    public static function setUpBeforeClass()
+    {
+    }
+
+    /**
+     * Setup before running each test case
+     */
+    public function setUp()
+    {
+    }
+
+    /**
+     * Clean up after running each test case
+     */
+    public function tearDown()
+    {
+    }
+
+    /**
+     * Clean up after running all test cases
+     */
+    public static function tearDownAfterClass()
+    {
+    }
+
+    /**
+     * Test "Client"
+     */
+    public function testClient()
+    {
+        $testClient = new Client();
+    }
+
+    /**
+     * Test attribute "client"
+     */
+    public function testPropertyClient()
+    {
+    }
+}
diff --git a/samples/server/petstore/php-slim4/test/Model/DogAllOfTest.php b/samples/server/petstore/php-slim4/test/Model/DogAllOfTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..2e189da95351f53c0eddf01dbc95b530b788f9ba
--- /dev/null
+++ b/samples/server/petstore/php-slim4/test/Model/DogAllOfTest.php
@@ -0,0 +1,84 @@
+<?php
+/**
+ * DogAllOfTest
+ *
+ * PHP version 7.1
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+
+/**
+ * OpenAPI Petstore
+ *
+ * This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\
+ * The version of the OpenAPI document: 1.0.0
+ * Generated by: https://github.com/openapitools/openapi-generator.git
+ */
+
+/**
+ * NOTE: This class is auto generated by the openapi generator program.
+ * https://github.com/openapitools/openapi-generator
+ * Please update the test case below to test the model.
+ */
+namespace OpenAPIServer\Model;
+
+use PHPUnit\Framework\TestCase;
+use OpenAPIServer\Model\DogAllOf;
+
+/**
+ * DogAllOfTest Class Doc Comment
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ *
+ * @coversDefaultClass \OpenAPIServer\Model\DogAllOf
+ */
+class DogAllOfTest extends TestCase
+{
+
+    /**
+     * Setup before running any test cases
+     */
+    public static function setUpBeforeClass()
+    {
+    }
+
+    /**
+     * Setup before running each test case
+     */
+    public function setUp()
+    {
+    }
+
+    /**
+     * Clean up after running each test case
+     */
+    public function tearDown()
+    {
+    }
+
+    /**
+     * Clean up after running all test cases
+     */
+    public static function tearDownAfterClass()
+    {
+    }
+
+    /**
+     * Test "DogAllOf"
+     */
+    public function testDogAllOf()
+    {
+        $testDogAllOf = new DogAllOf();
+    }
+
+    /**
+     * Test attribute "breed"
+     */
+    public function testPropertyBreed()
+    {
+    }
+}
diff --git a/samples/server/petstore/php-slim4/test/Model/DogTest.php b/samples/server/petstore/php-slim4/test/Model/DogTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..6fd80a4ee8e59eb4408ec7bb3a3ce41267784b5f
--- /dev/null
+++ b/samples/server/petstore/php-slim4/test/Model/DogTest.php
@@ -0,0 +1,98 @@
+<?php
+/**
+ * DogTest
+ *
+ * PHP version 7.1
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+
+/**
+ * OpenAPI Petstore
+ *
+ * This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\
+ * The version of the OpenAPI document: 1.0.0
+ * Generated by: https://github.com/openapitools/openapi-generator.git
+ */
+
+/**
+ * NOTE: This class is auto generated by the openapi generator program.
+ * https://github.com/openapitools/openapi-generator
+ * Please update the test case below to test the model.
+ */
+namespace OpenAPIServer\Model;
+
+use PHPUnit\Framework\TestCase;
+use OpenAPIServer\Model\Dog;
+
+/**
+ * DogTest Class Doc Comment
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ *
+ * @coversDefaultClass \OpenAPIServer\Model\Dog
+ */
+class DogTest extends TestCase
+{
+
+    /**
+     * Setup before running any test cases
+     */
+    public static function setUpBeforeClass()
+    {
+    }
+
+    /**
+     * Setup before running each test case
+     */
+    public function setUp()
+    {
+    }
+
+    /**
+     * Clean up after running each test case
+     */
+    public function tearDown()
+    {
+    }
+
+    /**
+     * Clean up after running all test cases
+     */
+    public static function tearDownAfterClass()
+    {
+    }
+
+    /**
+     * Test "Dog"
+     */
+    public function testDog()
+    {
+        $testDog = new Dog();
+    }
+
+    /**
+     * Test attribute "className"
+     */
+    public function testPropertyClassName()
+    {
+    }
+
+    /**
+     * Test attribute "color"
+     */
+    public function testPropertyColor()
+    {
+    }
+
+    /**
+     * Test attribute "breed"
+     */
+    public function testPropertyBreed()
+    {
+    }
+}
diff --git a/samples/server/petstore/php-slim4/test/Model/EnumArraysTest.php b/samples/server/petstore/php-slim4/test/Model/EnumArraysTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..116ce8b751ba7bb4e065096a40e61d34f9403a12
--- /dev/null
+++ b/samples/server/petstore/php-slim4/test/Model/EnumArraysTest.php
@@ -0,0 +1,91 @@
+<?php
+/**
+ * EnumArraysTest
+ *
+ * PHP version 7.1
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+
+/**
+ * OpenAPI Petstore
+ *
+ * This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\
+ * The version of the OpenAPI document: 1.0.0
+ * Generated by: https://github.com/openapitools/openapi-generator.git
+ */
+
+/**
+ * NOTE: This class is auto generated by the openapi generator program.
+ * https://github.com/openapitools/openapi-generator
+ * Please update the test case below to test the model.
+ */
+namespace OpenAPIServer\Model;
+
+use PHPUnit\Framework\TestCase;
+use OpenAPIServer\Model\EnumArrays;
+
+/**
+ * EnumArraysTest Class Doc Comment
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ *
+ * @coversDefaultClass \OpenAPIServer\Model\EnumArrays
+ */
+class EnumArraysTest extends TestCase
+{
+
+    /**
+     * Setup before running any test cases
+     */
+    public static function setUpBeforeClass()
+    {
+    }
+
+    /**
+     * Setup before running each test case
+     */
+    public function setUp()
+    {
+    }
+
+    /**
+     * Clean up after running each test case
+     */
+    public function tearDown()
+    {
+    }
+
+    /**
+     * Clean up after running all test cases
+     */
+    public static function tearDownAfterClass()
+    {
+    }
+
+    /**
+     * Test "EnumArrays"
+     */
+    public function testEnumArrays()
+    {
+        $testEnumArrays = new EnumArrays();
+    }
+
+    /**
+     * Test attribute "justSymbol"
+     */
+    public function testPropertyJustSymbol()
+    {
+    }
+
+    /**
+     * Test attribute "arrayEnum"
+     */
+    public function testPropertyArrayEnum()
+    {
+    }
+}
diff --git a/samples/server/petstore/php-slim4/test/Model/EnumClassTest.php b/samples/server/petstore/php-slim4/test/Model/EnumClassTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..10881318c283e1ce9d1c7843ad1cade693fee4d0
--- /dev/null
+++ b/samples/server/petstore/php-slim4/test/Model/EnumClassTest.php
@@ -0,0 +1,77 @@
+<?php
+/**
+ * EnumClassTest
+ *
+ * PHP version 7.1
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+
+/**
+ * OpenAPI Petstore
+ *
+ * This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\
+ * The version of the OpenAPI document: 1.0.0
+ * Generated by: https://github.com/openapitools/openapi-generator.git
+ */
+
+/**
+ * NOTE: This class is auto generated by the openapi generator program.
+ * https://github.com/openapitools/openapi-generator
+ * Please update the test case below to test the model.
+ */
+namespace OpenAPIServer\Model;
+
+use PHPUnit\Framework\TestCase;
+use OpenAPIServer\Model\EnumClass;
+
+/**
+ * EnumClassTest Class Doc Comment
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ *
+ * @coversDefaultClass \OpenAPIServer\Model\EnumClass
+ */
+class EnumClassTest extends TestCase
+{
+
+    /**
+     * Setup before running any test cases
+     */
+    public static function setUpBeforeClass()
+    {
+    }
+
+    /**
+     * Setup before running each test case
+     */
+    public function setUp()
+    {
+    }
+
+    /**
+     * Clean up after running each test case
+     */
+    public function tearDown()
+    {
+    }
+
+    /**
+     * Clean up after running all test cases
+     */
+    public static function tearDownAfterClass()
+    {
+    }
+
+    /**
+     * Test "EnumClass"
+     */
+    public function testEnumClass()
+    {
+        $testEnumClass = new EnumClass();
+    }
+}
diff --git a/samples/server/petstore/php-slim4/test/Model/EnumTestTest.php b/samples/server/petstore/php-slim4/test/Model/EnumTestTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..d92ff8fc586baf399826b4c51a4c0c3c698b40da
--- /dev/null
+++ b/samples/server/petstore/php-slim4/test/Model/EnumTestTest.php
@@ -0,0 +1,112 @@
+<?php
+/**
+ * EnumTestTest
+ *
+ * PHP version 7.1
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+
+/**
+ * OpenAPI Petstore
+ *
+ * This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\
+ * The version of the OpenAPI document: 1.0.0
+ * Generated by: https://github.com/openapitools/openapi-generator.git
+ */
+
+/**
+ * NOTE: This class is auto generated by the openapi generator program.
+ * https://github.com/openapitools/openapi-generator
+ * Please update the test case below to test the model.
+ */
+namespace OpenAPIServer\Model;
+
+use PHPUnit\Framework\TestCase;
+use OpenAPIServer\Model\EnumTest;
+
+/**
+ * EnumTestTest Class Doc Comment
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ *
+ * @coversDefaultClass \OpenAPIServer\Model\EnumTest
+ */
+class EnumTestTest extends TestCase
+{
+
+    /**
+     * Setup before running any test cases
+     */
+    public static function setUpBeforeClass()
+    {
+    }
+
+    /**
+     * Setup before running each test case
+     */
+    public function setUp()
+    {
+    }
+
+    /**
+     * Clean up after running each test case
+     */
+    public function tearDown()
+    {
+    }
+
+    /**
+     * Clean up after running all test cases
+     */
+    public static function tearDownAfterClass()
+    {
+    }
+
+    /**
+     * Test "EnumTest"
+     */
+    public function testEnumTest()
+    {
+        $testEnumTest = new EnumTest();
+    }
+
+    /**
+     * Test attribute "enumString"
+     */
+    public function testPropertyEnumString()
+    {
+    }
+
+    /**
+     * Test attribute "enumStringRequired"
+     */
+    public function testPropertyEnumStringRequired()
+    {
+    }
+
+    /**
+     * Test attribute "enumInteger"
+     */
+    public function testPropertyEnumInteger()
+    {
+    }
+
+    /**
+     * Test attribute "enumNumber"
+     */
+    public function testPropertyEnumNumber()
+    {
+    }
+
+    /**
+     * Test attribute "outerEnum"
+     */
+    public function testPropertyOuterEnum()
+    {
+    }
+}
diff --git a/samples/server/petstore/php-slim4/test/Model/FileSchemaTestClassTest.php b/samples/server/petstore/php-slim4/test/Model/FileSchemaTestClassTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..7e9152c2b7a92a90f0c2e0a158f23af225bcc539
--- /dev/null
+++ b/samples/server/petstore/php-slim4/test/Model/FileSchemaTestClassTest.php
@@ -0,0 +1,91 @@
+<?php
+/**
+ * FileSchemaTestClassTest
+ *
+ * PHP version 7.1
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+
+/**
+ * OpenAPI Petstore
+ *
+ * This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\
+ * The version of the OpenAPI document: 1.0.0
+ * Generated by: https://github.com/openapitools/openapi-generator.git
+ */
+
+/**
+ * NOTE: This class is auto generated by the openapi generator program.
+ * https://github.com/openapitools/openapi-generator
+ * Please update the test case below to test the model.
+ */
+namespace OpenAPIServer\Model;
+
+use PHPUnit\Framework\TestCase;
+use OpenAPIServer\Model\FileSchemaTestClass;
+
+/**
+ * FileSchemaTestClassTest Class Doc Comment
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ *
+ * @coversDefaultClass \OpenAPIServer\Model\FileSchemaTestClass
+ */
+class FileSchemaTestClassTest extends TestCase
+{
+
+    /**
+     * Setup before running any test cases
+     */
+    public static function setUpBeforeClass()
+    {
+    }
+
+    /**
+     * Setup before running each test case
+     */
+    public function setUp()
+    {
+    }
+
+    /**
+     * Clean up after running each test case
+     */
+    public function tearDown()
+    {
+    }
+
+    /**
+     * Clean up after running all test cases
+     */
+    public static function tearDownAfterClass()
+    {
+    }
+
+    /**
+     * Test "FileSchemaTestClass"
+     */
+    public function testFileSchemaTestClass()
+    {
+        $testFileSchemaTestClass = new FileSchemaTestClass();
+    }
+
+    /**
+     * Test attribute "file"
+     */
+    public function testPropertyFile()
+    {
+    }
+
+    /**
+     * Test attribute "files"
+     */
+    public function testPropertyFiles()
+    {
+    }
+}
diff --git a/samples/server/petstore/php-slim4/test/Model/FileTest.php b/samples/server/petstore/php-slim4/test/Model/FileTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..42c805c05b8409180cfd068b9baa9659fff50049
--- /dev/null
+++ b/samples/server/petstore/php-slim4/test/Model/FileTest.php
@@ -0,0 +1,84 @@
+<?php
+/**
+ * FileTest
+ *
+ * PHP version 7.1
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+
+/**
+ * OpenAPI Petstore
+ *
+ * This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\
+ * The version of the OpenAPI document: 1.0.0
+ * Generated by: https://github.com/openapitools/openapi-generator.git
+ */
+
+/**
+ * NOTE: This class is auto generated by the openapi generator program.
+ * https://github.com/openapitools/openapi-generator
+ * Please update the test case below to test the model.
+ */
+namespace OpenAPIServer\Model;
+
+use PHPUnit\Framework\TestCase;
+use OpenAPIServer\Model\File;
+
+/**
+ * FileTest Class Doc Comment
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ *
+ * @coversDefaultClass \OpenAPIServer\Model\File
+ */
+class FileTest extends TestCase
+{
+
+    /**
+     * Setup before running any test cases
+     */
+    public static function setUpBeforeClass()
+    {
+    }
+
+    /**
+     * Setup before running each test case
+     */
+    public function setUp()
+    {
+    }
+
+    /**
+     * Clean up after running each test case
+     */
+    public function tearDown()
+    {
+    }
+
+    /**
+     * Clean up after running all test cases
+     */
+    public static function tearDownAfterClass()
+    {
+    }
+
+    /**
+     * Test "File"
+     */
+    public function testFile()
+    {
+        $testFile = new File();
+    }
+
+    /**
+     * Test attribute "sourceURI"
+     */
+    public function testPropertySourceURI()
+    {
+    }
+}
diff --git a/samples/server/petstore/php-slim4/test/Model/FormatTestTest.php b/samples/server/petstore/php-slim4/test/Model/FormatTestTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..29116f350eab92fdf9fa803bf89426375fa6eb74
--- /dev/null
+++ b/samples/server/petstore/php-slim4/test/Model/FormatTestTest.php
@@ -0,0 +1,175 @@
+<?php
+/**
+ * FormatTestTest
+ *
+ * PHP version 7.1
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+
+/**
+ * OpenAPI Petstore
+ *
+ * This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\
+ * The version of the OpenAPI document: 1.0.0
+ * Generated by: https://github.com/openapitools/openapi-generator.git
+ */
+
+/**
+ * NOTE: This class is auto generated by the openapi generator program.
+ * https://github.com/openapitools/openapi-generator
+ * Please update the test case below to test the model.
+ */
+namespace OpenAPIServer\Model;
+
+use PHPUnit\Framework\TestCase;
+use OpenAPIServer\Model\FormatTest;
+
+/**
+ * FormatTestTest Class Doc Comment
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ *
+ * @coversDefaultClass \OpenAPIServer\Model\FormatTest
+ */
+class FormatTestTest extends TestCase
+{
+
+    /**
+     * Setup before running any test cases
+     */
+    public static function setUpBeforeClass()
+    {
+    }
+
+    /**
+     * Setup before running each test case
+     */
+    public function setUp()
+    {
+    }
+
+    /**
+     * Clean up after running each test case
+     */
+    public function tearDown()
+    {
+    }
+
+    /**
+     * Clean up after running all test cases
+     */
+    public static function tearDownAfterClass()
+    {
+    }
+
+    /**
+     * Test "FormatTest"
+     */
+    public function testFormatTest()
+    {
+        $testFormatTest = new FormatTest();
+    }
+
+    /**
+     * Test attribute "integer"
+     */
+    public function testPropertyInteger()
+    {
+    }
+
+    /**
+     * Test attribute "int32"
+     */
+    public function testPropertyInt32()
+    {
+    }
+
+    /**
+     * Test attribute "int64"
+     */
+    public function testPropertyInt64()
+    {
+    }
+
+    /**
+     * Test attribute "number"
+     */
+    public function testPropertyNumber()
+    {
+    }
+
+    /**
+     * Test attribute "float"
+     */
+    public function testPropertyFloat()
+    {
+    }
+
+    /**
+     * Test attribute "double"
+     */
+    public function testPropertyDouble()
+    {
+    }
+
+    /**
+     * Test attribute "string"
+     */
+    public function testPropertyString()
+    {
+    }
+
+    /**
+     * Test attribute "byte"
+     */
+    public function testPropertyByte()
+    {
+    }
+
+    /**
+     * Test attribute "binary"
+     */
+    public function testPropertyBinary()
+    {
+    }
+
+    /**
+     * Test attribute "date"
+     */
+    public function testPropertyDate()
+    {
+    }
+
+    /**
+     * Test attribute "dateTime"
+     */
+    public function testPropertyDateTime()
+    {
+    }
+
+    /**
+     * Test attribute "uuid"
+     */
+    public function testPropertyUuid()
+    {
+    }
+
+    /**
+     * Test attribute "password"
+     */
+    public function testPropertyPassword()
+    {
+    }
+
+    /**
+     * Test attribute "bigDecimal"
+     */
+    public function testPropertyBigDecimal()
+    {
+    }
+}
diff --git a/samples/server/petstore/php-slim4/test/Model/HasOnlyReadOnlyTest.php b/samples/server/petstore/php-slim4/test/Model/HasOnlyReadOnlyTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..404574c6db3ff246c419915f202adfd6f5bb9505
--- /dev/null
+++ b/samples/server/petstore/php-slim4/test/Model/HasOnlyReadOnlyTest.php
@@ -0,0 +1,91 @@
+<?php
+/**
+ * HasOnlyReadOnlyTest
+ *
+ * PHP version 7.1
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+
+/**
+ * OpenAPI Petstore
+ *
+ * This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\
+ * The version of the OpenAPI document: 1.0.0
+ * Generated by: https://github.com/openapitools/openapi-generator.git
+ */
+
+/**
+ * NOTE: This class is auto generated by the openapi generator program.
+ * https://github.com/openapitools/openapi-generator
+ * Please update the test case below to test the model.
+ */
+namespace OpenAPIServer\Model;
+
+use PHPUnit\Framework\TestCase;
+use OpenAPIServer\Model\HasOnlyReadOnly;
+
+/**
+ * HasOnlyReadOnlyTest Class Doc Comment
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ *
+ * @coversDefaultClass \OpenAPIServer\Model\HasOnlyReadOnly
+ */
+class HasOnlyReadOnlyTest extends TestCase
+{
+
+    /**
+     * Setup before running any test cases
+     */
+    public static function setUpBeforeClass()
+    {
+    }
+
+    /**
+     * Setup before running each test case
+     */
+    public function setUp()
+    {
+    }
+
+    /**
+     * Clean up after running each test case
+     */
+    public function tearDown()
+    {
+    }
+
+    /**
+     * Clean up after running all test cases
+     */
+    public static function tearDownAfterClass()
+    {
+    }
+
+    /**
+     * Test "HasOnlyReadOnly"
+     */
+    public function testHasOnlyReadOnly()
+    {
+        $testHasOnlyReadOnly = new HasOnlyReadOnly();
+    }
+
+    /**
+     * Test attribute "bar"
+     */
+    public function testPropertyBar()
+    {
+    }
+
+    /**
+     * Test attribute "foo"
+     */
+    public function testPropertyFoo()
+    {
+    }
+}
diff --git a/samples/server/petstore/php-slim4/test/Model/MapTestTest.php b/samples/server/petstore/php-slim4/test/Model/MapTestTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..43f0759f54555bc63f6b5e02795c23aa730d6e1c
--- /dev/null
+++ b/samples/server/petstore/php-slim4/test/Model/MapTestTest.php
@@ -0,0 +1,105 @@
+<?php
+/**
+ * MapTestTest
+ *
+ * PHP version 7.1
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+
+/**
+ * OpenAPI Petstore
+ *
+ * This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\
+ * The version of the OpenAPI document: 1.0.0
+ * Generated by: https://github.com/openapitools/openapi-generator.git
+ */
+
+/**
+ * NOTE: This class is auto generated by the openapi generator program.
+ * https://github.com/openapitools/openapi-generator
+ * Please update the test case below to test the model.
+ */
+namespace OpenAPIServer\Model;
+
+use PHPUnit\Framework\TestCase;
+use OpenAPIServer\Model\MapTest;
+
+/**
+ * MapTestTest Class Doc Comment
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ *
+ * @coversDefaultClass \OpenAPIServer\Model\MapTest
+ */
+class MapTestTest extends TestCase
+{
+
+    /**
+     * Setup before running any test cases
+     */
+    public static function setUpBeforeClass()
+    {
+    }
+
+    /**
+     * Setup before running each test case
+     */
+    public function setUp()
+    {
+    }
+
+    /**
+     * Clean up after running each test case
+     */
+    public function tearDown()
+    {
+    }
+
+    /**
+     * Clean up after running all test cases
+     */
+    public static function tearDownAfterClass()
+    {
+    }
+
+    /**
+     * Test "MapTest"
+     */
+    public function testMapTest()
+    {
+        $testMapTest = new MapTest();
+    }
+
+    /**
+     * Test attribute "mapMapOfString"
+     */
+    public function testPropertyMapMapOfString()
+    {
+    }
+
+    /**
+     * Test attribute "mapOfEnumString"
+     */
+    public function testPropertyMapOfEnumString()
+    {
+    }
+
+    /**
+     * Test attribute "directMap"
+     */
+    public function testPropertyDirectMap()
+    {
+    }
+
+    /**
+     * Test attribute "indirectMap"
+     */
+    public function testPropertyIndirectMap()
+    {
+    }
+}
diff --git a/samples/server/petstore/php-slim4/test/Model/MixedPropertiesAndAdditionalPropertiesClassTest.php b/samples/server/petstore/php-slim4/test/Model/MixedPropertiesAndAdditionalPropertiesClassTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..b1cd25f2d0c9dfe086c510cb6cd6fb2bb0db03e1
--- /dev/null
+++ b/samples/server/petstore/php-slim4/test/Model/MixedPropertiesAndAdditionalPropertiesClassTest.php
@@ -0,0 +1,98 @@
+<?php
+/**
+ * MixedPropertiesAndAdditionalPropertiesClassTest
+ *
+ * PHP version 7.1
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+
+/**
+ * OpenAPI Petstore
+ *
+ * This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\
+ * The version of the OpenAPI document: 1.0.0
+ * Generated by: https://github.com/openapitools/openapi-generator.git
+ */
+
+/**
+ * NOTE: This class is auto generated by the openapi generator program.
+ * https://github.com/openapitools/openapi-generator
+ * Please update the test case below to test the model.
+ */
+namespace OpenAPIServer\Model;
+
+use PHPUnit\Framework\TestCase;
+use OpenAPIServer\Model\MixedPropertiesAndAdditionalPropertiesClass;
+
+/**
+ * MixedPropertiesAndAdditionalPropertiesClassTest Class Doc Comment
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ *
+ * @coversDefaultClass \OpenAPIServer\Model\MixedPropertiesAndAdditionalPropertiesClass
+ */
+class MixedPropertiesAndAdditionalPropertiesClassTest extends TestCase
+{
+
+    /**
+     * Setup before running any test cases
+     */
+    public static function setUpBeforeClass()
+    {
+    }
+
+    /**
+     * Setup before running each test case
+     */
+    public function setUp()
+    {
+    }
+
+    /**
+     * Clean up after running each test case
+     */
+    public function tearDown()
+    {
+    }
+
+    /**
+     * Clean up after running all test cases
+     */
+    public static function tearDownAfterClass()
+    {
+    }
+
+    /**
+     * Test "MixedPropertiesAndAdditionalPropertiesClass"
+     */
+    public function testMixedPropertiesAndAdditionalPropertiesClass()
+    {
+        $testMixedPropertiesAndAdditionalPropertiesClass = new MixedPropertiesAndAdditionalPropertiesClass();
+    }
+
+    /**
+     * Test attribute "uuid"
+     */
+    public function testPropertyUuid()
+    {
+    }
+
+    /**
+     * Test attribute "dateTime"
+     */
+    public function testPropertyDateTime()
+    {
+    }
+
+    /**
+     * Test attribute "map"
+     */
+    public function testPropertyMap()
+    {
+    }
+}
diff --git a/samples/server/petstore/php-slim4/test/Model/Model200ResponseTest.php b/samples/server/petstore/php-slim4/test/Model/Model200ResponseTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..2f563ac79dde8e4bdb9f59365411697fc4175e52
--- /dev/null
+++ b/samples/server/petstore/php-slim4/test/Model/Model200ResponseTest.php
@@ -0,0 +1,91 @@
+<?php
+/**
+ * Model200ResponseTest
+ *
+ * PHP version 7.1
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+
+/**
+ * OpenAPI Petstore
+ *
+ * This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\
+ * The version of the OpenAPI document: 1.0.0
+ * Generated by: https://github.com/openapitools/openapi-generator.git
+ */
+
+/**
+ * NOTE: This class is auto generated by the openapi generator program.
+ * https://github.com/openapitools/openapi-generator
+ * Please update the test case below to test the model.
+ */
+namespace OpenAPIServer\Model;
+
+use PHPUnit\Framework\TestCase;
+use OpenAPIServer\Model\Model200Response;
+
+/**
+ * Model200ResponseTest Class Doc Comment
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ *
+ * @coversDefaultClass \OpenAPIServer\Model\Model200Response
+ */
+class Model200ResponseTest extends TestCase
+{
+
+    /**
+     * Setup before running any test cases
+     */
+    public static function setUpBeforeClass()
+    {
+    }
+
+    /**
+     * Setup before running each test case
+     */
+    public function setUp()
+    {
+    }
+
+    /**
+     * Clean up after running each test case
+     */
+    public function tearDown()
+    {
+    }
+
+    /**
+     * Clean up after running all test cases
+     */
+    public static function tearDownAfterClass()
+    {
+    }
+
+    /**
+     * Test "Model200Response"
+     */
+    public function testModel200Response()
+    {
+        $testModel200Response = new Model200Response();
+    }
+
+    /**
+     * Test attribute "name"
+     */
+    public function testPropertyName()
+    {
+    }
+
+    /**
+     * Test attribute "class"
+     */
+    public function testPropertyClass()
+    {
+    }
+}
diff --git a/samples/server/petstore/php-slim4/test/Model/ModelListTest.php b/samples/server/petstore/php-slim4/test/Model/ModelListTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..969ccf788d0cfc83108c5a2819233aaf0cd351a3
--- /dev/null
+++ b/samples/server/petstore/php-slim4/test/Model/ModelListTest.php
@@ -0,0 +1,84 @@
+<?php
+/**
+ * ModelListTest
+ *
+ * PHP version 7.1
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+
+/**
+ * OpenAPI Petstore
+ *
+ * This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\
+ * The version of the OpenAPI document: 1.0.0
+ * Generated by: https://github.com/openapitools/openapi-generator.git
+ */
+
+/**
+ * NOTE: This class is auto generated by the openapi generator program.
+ * https://github.com/openapitools/openapi-generator
+ * Please update the test case below to test the model.
+ */
+namespace OpenAPIServer\Model;
+
+use PHPUnit\Framework\TestCase;
+use OpenAPIServer\Model\ModelList;
+
+/**
+ * ModelListTest Class Doc Comment
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ *
+ * @coversDefaultClass \OpenAPIServer\Model\ModelList
+ */
+class ModelListTest extends TestCase
+{
+
+    /**
+     * Setup before running any test cases
+     */
+    public static function setUpBeforeClass()
+    {
+    }
+
+    /**
+     * Setup before running each test case
+     */
+    public function setUp()
+    {
+    }
+
+    /**
+     * Clean up after running each test case
+     */
+    public function tearDown()
+    {
+    }
+
+    /**
+     * Clean up after running all test cases
+     */
+    public static function tearDownAfterClass()
+    {
+    }
+
+    /**
+     * Test "ModelList"
+     */
+    public function testModelList()
+    {
+        $testModelList = new ModelList();
+    }
+
+    /**
+     * Test attribute "_123list"
+     */
+    public function testProperty123list()
+    {
+    }
+}
diff --git a/samples/server/petstore/php-slim4/test/Model/ModelReturnTest.php b/samples/server/petstore/php-slim4/test/Model/ModelReturnTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..bab219d8d35a3550ee2ecfcd8d30d166735abb83
--- /dev/null
+++ b/samples/server/petstore/php-slim4/test/Model/ModelReturnTest.php
@@ -0,0 +1,84 @@
+<?php
+/**
+ * ModelReturnTest
+ *
+ * PHP version 7.1
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+
+/**
+ * OpenAPI Petstore
+ *
+ * This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\
+ * The version of the OpenAPI document: 1.0.0
+ * Generated by: https://github.com/openapitools/openapi-generator.git
+ */
+
+/**
+ * NOTE: This class is auto generated by the openapi generator program.
+ * https://github.com/openapitools/openapi-generator
+ * Please update the test case below to test the model.
+ */
+namespace OpenAPIServer\Model;
+
+use PHPUnit\Framework\TestCase;
+use OpenAPIServer\Model\ModelReturn;
+
+/**
+ * ModelReturnTest Class Doc Comment
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ *
+ * @coversDefaultClass \OpenAPIServer\Model\ModelReturn
+ */
+class ModelReturnTest extends TestCase
+{
+
+    /**
+     * Setup before running any test cases
+     */
+    public static function setUpBeforeClass()
+    {
+    }
+
+    /**
+     * Setup before running each test case
+     */
+    public function setUp()
+    {
+    }
+
+    /**
+     * Clean up after running each test case
+     */
+    public function tearDown()
+    {
+    }
+
+    /**
+     * Clean up after running all test cases
+     */
+    public static function tearDownAfterClass()
+    {
+    }
+
+    /**
+     * Test "ModelReturn"
+     */
+    public function testModelReturn()
+    {
+        $testModelReturn = new ModelReturn();
+    }
+
+    /**
+     * Test attribute "return"
+     */
+    public function testPropertyReturn()
+    {
+    }
+}
diff --git a/samples/server/petstore/php-slim4/test/Model/NameTest.php b/samples/server/petstore/php-slim4/test/Model/NameTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..4a4e3e782be719c009275ff232e23ccec97ae1f8
--- /dev/null
+++ b/samples/server/petstore/php-slim4/test/Model/NameTest.php
@@ -0,0 +1,105 @@
+<?php
+/**
+ * NameTest
+ *
+ * PHP version 7.1
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+
+/**
+ * OpenAPI Petstore
+ *
+ * This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\
+ * The version of the OpenAPI document: 1.0.0
+ * Generated by: https://github.com/openapitools/openapi-generator.git
+ */
+
+/**
+ * NOTE: This class is auto generated by the openapi generator program.
+ * https://github.com/openapitools/openapi-generator
+ * Please update the test case below to test the model.
+ */
+namespace OpenAPIServer\Model;
+
+use PHPUnit\Framework\TestCase;
+use OpenAPIServer\Model\Name;
+
+/**
+ * NameTest Class Doc Comment
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ *
+ * @coversDefaultClass \OpenAPIServer\Model\Name
+ */
+class NameTest extends TestCase
+{
+
+    /**
+     * Setup before running any test cases
+     */
+    public static function setUpBeforeClass()
+    {
+    }
+
+    /**
+     * Setup before running each test case
+     */
+    public function setUp()
+    {
+    }
+
+    /**
+     * Clean up after running each test case
+     */
+    public function tearDown()
+    {
+    }
+
+    /**
+     * Clean up after running all test cases
+     */
+    public static function tearDownAfterClass()
+    {
+    }
+
+    /**
+     * Test "Name"
+     */
+    public function testName()
+    {
+        $testName = new Name();
+    }
+
+    /**
+     * Test attribute "name"
+     */
+    public function testPropertyName()
+    {
+    }
+
+    /**
+     * Test attribute "snakeCase"
+     */
+    public function testPropertySnakeCase()
+    {
+    }
+
+    /**
+     * Test attribute "property"
+     */
+    public function testPropertyProperty()
+    {
+    }
+
+    /**
+     * Test attribute "_123number"
+     */
+    public function testProperty123number()
+    {
+    }
+}
diff --git a/samples/server/petstore/php-slim4/test/Model/NumberOnlyTest.php b/samples/server/petstore/php-slim4/test/Model/NumberOnlyTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..95a4607d00299e0b784ddbe35faa815acb62044c
--- /dev/null
+++ b/samples/server/petstore/php-slim4/test/Model/NumberOnlyTest.php
@@ -0,0 +1,84 @@
+<?php
+/**
+ * NumberOnlyTest
+ *
+ * PHP version 7.1
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+
+/**
+ * OpenAPI Petstore
+ *
+ * This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\
+ * The version of the OpenAPI document: 1.0.0
+ * Generated by: https://github.com/openapitools/openapi-generator.git
+ */
+
+/**
+ * NOTE: This class is auto generated by the openapi generator program.
+ * https://github.com/openapitools/openapi-generator
+ * Please update the test case below to test the model.
+ */
+namespace OpenAPIServer\Model;
+
+use PHPUnit\Framework\TestCase;
+use OpenAPIServer\Model\NumberOnly;
+
+/**
+ * NumberOnlyTest Class Doc Comment
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ *
+ * @coversDefaultClass \OpenAPIServer\Model\NumberOnly
+ */
+class NumberOnlyTest extends TestCase
+{
+
+    /**
+     * Setup before running any test cases
+     */
+    public static function setUpBeforeClass()
+    {
+    }
+
+    /**
+     * Setup before running each test case
+     */
+    public function setUp()
+    {
+    }
+
+    /**
+     * Clean up after running each test case
+     */
+    public function tearDown()
+    {
+    }
+
+    /**
+     * Clean up after running all test cases
+     */
+    public static function tearDownAfterClass()
+    {
+    }
+
+    /**
+     * Test "NumberOnly"
+     */
+    public function testNumberOnly()
+    {
+        $testNumberOnly = new NumberOnly();
+    }
+
+    /**
+     * Test attribute "justNumber"
+     */
+    public function testPropertyJustNumber()
+    {
+    }
+}
diff --git a/samples/server/petstore/php-slim4/test/Model/OrderTest.php b/samples/server/petstore/php-slim4/test/Model/OrderTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..ec7ccfc360917fad251a612716764c54181ff0a6
--- /dev/null
+++ b/samples/server/petstore/php-slim4/test/Model/OrderTest.php
@@ -0,0 +1,119 @@
+<?php
+/**
+ * OrderTest
+ *
+ * PHP version 7.1
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+
+/**
+ * OpenAPI Petstore
+ *
+ * This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\
+ * The version of the OpenAPI document: 1.0.0
+ * Generated by: https://github.com/openapitools/openapi-generator.git
+ */
+
+/**
+ * NOTE: This class is auto generated by the openapi generator program.
+ * https://github.com/openapitools/openapi-generator
+ * Please update the test case below to test the model.
+ */
+namespace OpenAPIServer\Model;
+
+use PHPUnit\Framework\TestCase;
+use OpenAPIServer\Model\Order;
+
+/**
+ * OrderTest Class Doc Comment
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ *
+ * @coversDefaultClass \OpenAPIServer\Model\Order
+ */
+class OrderTest extends TestCase
+{
+
+    /**
+     * Setup before running any test cases
+     */
+    public static function setUpBeforeClass()
+    {
+    }
+
+    /**
+     * Setup before running each test case
+     */
+    public function setUp()
+    {
+    }
+
+    /**
+     * Clean up after running each test case
+     */
+    public function tearDown()
+    {
+    }
+
+    /**
+     * Clean up after running all test cases
+     */
+    public static function tearDownAfterClass()
+    {
+    }
+
+    /**
+     * Test "Order"
+     */
+    public function testOrder()
+    {
+        $testOrder = new Order();
+    }
+
+    /**
+     * Test attribute "id"
+     */
+    public function testPropertyId()
+    {
+    }
+
+    /**
+     * Test attribute "petId"
+     */
+    public function testPropertyPetId()
+    {
+    }
+
+    /**
+     * Test attribute "quantity"
+     */
+    public function testPropertyQuantity()
+    {
+    }
+
+    /**
+     * Test attribute "shipDate"
+     */
+    public function testPropertyShipDate()
+    {
+    }
+
+    /**
+     * Test attribute "status"
+     */
+    public function testPropertyStatus()
+    {
+    }
+
+    /**
+     * Test attribute "complete"
+     */
+    public function testPropertyComplete()
+    {
+    }
+}
diff --git a/samples/server/petstore/php-slim4/test/Model/OuterCompositeTest.php b/samples/server/petstore/php-slim4/test/Model/OuterCompositeTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..3a3e699b478dd87dfbc8d1032c3ccf21b2971684
--- /dev/null
+++ b/samples/server/petstore/php-slim4/test/Model/OuterCompositeTest.php
@@ -0,0 +1,98 @@
+<?php
+/**
+ * OuterCompositeTest
+ *
+ * PHP version 7.1
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+
+/**
+ * OpenAPI Petstore
+ *
+ * This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\
+ * The version of the OpenAPI document: 1.0.0
+ * Generated by: https://github.com/openapitools/openapi-generator.git
+ */
+
+/**
+ * NOTE: This class is auto generated by the openapi generator program.
+ * https://github.com/openapitools/openapi-generator
+ * Please update the test case below to test the model.
+ */
+namespace OpenAPIServer\Model;
+
+use PHPUnit\Framework\TestCase;
+use OpenAPIServer\Model\OuterComposite;
+
+/**
+ * OuterCompositeTest Class Doc Comment
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ *
+ * @coversDefaultClass \OpenAPIServer\Model\OuterComposite
+ */
+class OuterCompositeTest extends TestCase
+{
+
+    /**
+     * Setup before running any test cases
+     */
+    public static function setUpBeforeClass()
+    {
+    }
+
+    /**
+     * Setup before running each test case
+     */
+    public function setUp()
+    {
+    }
+
+    /**
+     * Clean up after running each test case
+     */
+    public function tearDown()
+    {
+    }
+
+    /**
+     * Clean up after running all test cases
+     */
+    public static function tearDownAfterClass()
+    {
+    }
+
+    /**
+     * Test "OuterComposite"
+     */
+    public function testOuterComposite()
+    {
+        $testOuterComposite = new OuterComposite();
+    }
+
+    /**
+     * Test attribute "myNumber"
+     */
+    public function testPropertyMyNumber()
+    {
+    }
+
+    /**
+     * Test attribute "myString"
+     */
+    public function testPropertyMyString()
+    {
+    }
+
+    /**
+     * Test attribute "myBoolean"
+     */
+    public function testPropertyMyBoolean()
+    {
+    }
+}
diff --git a/samples/server/petstore/php-slim4/test/Model/OuterEnumTest.php b/samples/server/petstore/php-slim4/test/Model/OuterEnumTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..57846e32a27114e319e297b8115744dc1a640dba
--- /dev/null
+++ b/samples/server/petstore/php-slim4/test/Model/OuterEnumTest.php
@@ -0,0 +1,77 @@
+<?php
+/**
+ * OuterEnumTest
+ *
+ * PHP version 7.1
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+
+/**
+ * OpenAPI Petstore
+ *
+ * This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\
+ * The version of the OpenAPI document: 1.0.0
+ * Generated by: https://github.com/openapitools/openapi-generator.git
+ */
+
+/**
+ * NOTE: This class is auto generated by the openapi generator program.
+ * https://github.com/openapitools/openapi-generator
+ * Please update the test case below to test the model.
+ */
+namespace OpenAPIServer\Model;
+
+use PHPUnit\Framework\TestCase;
+use OpenAPIServer\Model\OuterEnum;
+
+/**
+ * OuterEnumTest Class Doc Comment
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ *
+ * @coversDefaultClass \OpenAPIServer\Model\OuterEnum
+ */
+class OuterEnumTest extends TestCase
+{
+
+    /**
+     * Setup before running any test cases
+     */
+    public static function setUpBeforeClass()
+    {
+    }
+
+    /**
+     * Setup before running each test case
+     */
+    public function setUp()
+    {
+    }
+
+    /**
+     * Clean up after running each test case
+     */
+    public function tearDown()
+    {
+    }
+
+    /**
+     * Clean up after running all test cases
+     */
+    public static function tearDownAfterClass()
+    {
+    }
+
+    /**
+     * Test "OuterEnum"
+     */
+    public function testOuterEnum()
+    {
+        $testOuterEnum = new OuterEnum();
+    }
+}
diff --git a/samples/server/petstore/php-slim4/test/Model/PetTest.php b/samples/server/petstore/php-slim4/test/Model/PetTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..1a8472e41d7682acee36e3bc95a2a097b4285893
--- /dev/null
+++ b/samples/server/petstore/php-slim4/test/Model/PetTest.php
@@ -0,0 +1,119 @@
+<?php
+/**
+ * PetTest
+ *
+ * PHP version 7.1
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+
+/**
+ * OpenAPI Petstore
+ *
+ * This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\
+ * The version of the OpenAPI document: 1.0.0
+ * Generated by: https://github.com/openapitools/openapi-generator.git
+ */
+
+/**
+ * NOTE: This class is auto generated by the openapi generator program.
+ * https://github.com/openapitools/openapi-generator
+ * Please update the test case below to test the model.
+ */
+namespace OpenAPIServer\Model;
+
+use PHPUnit\Framework\TestCase;
+use OpenAPIServer\Model\Pet;
+
+/**
+ * PetTest Class Doc Comment
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ *
+ * @coversDefaultClass \OpenAPIServer\Model\Pet
+ */
+class PetTest extends TestCase
+{
+
+    /**
+     * Setup before running any test cases
+     */
+    public static function setUpBeforeClass()
+    {
+    }
+
+    /**
+     * Setup before running each test case
+     */
+    public function setUp()
+    {
+    }
+
+    /**
+     * Clean up after running each test case
+     */
+    public function tearDown()
+    {
+    }
+
+    /**
+     * Clean up after running all test cases
+     */
+    public static function tearDownAfterClass()
+    {
+    }
+
+    /**
+     * Test "Pet"
+     */
+    public function testPet()
+    {
+        $testPet = new Pet();
+    }
+
+    /**
+     * Test attribute "id"
+     */
+    public function testPropertyId()
+    {
+    }
+
+    /**
+     * Test attribute "category"
+     */
+    public function testPropertyCategory()
+    {
+    }
+
+    /**
+     * Test attribute "name"
+     */
+    public function testPropertyName()
+    {
+    }
+
+    /**
+     * Test attribute "photoUrls"
+     */
+    public function testPropertyPhotoUrls()
+    {
+    }
+
+    /**
+     * Test attribute "tags"
+     */
+    public function testPropertyTags()
+    {
+    }
+
+    /**
+     * Test attribute "status"
+     */
+    public function testPropertyStatus()
+    {
+    }
+}
diff --git a/samples/server/petstore/php-slim4/test/Model/ReadOnlyFirstTest.php b/samples/server/petstore/php-slim4/test/Model/ReadOnlyFirstTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..4fe1a62f9a632485ddef034a85896f33a5d52715
--- /dev/null
+++ b/samples/server/petstore/php-slim4/test/Model/ReadOnlyFirstTest.php
@@ -0,0 +1,91 @@
+<?php
+/**
+ * ReadOnlyFirstTest
+ *
+ * PHP version 7.1
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+
+/**
+ * OpenAPI Petstore
+ *
+ * This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\
+ * The version of the OpenAPI document: 1.0.0
+ * Generated by: https://github.com/openapitools/openapi-generator.git
+ */
+
+/**
+ * NOTE: This class is auto generated by the openapi generator program.
+ * https://github.com/openapitools/openapi-generator
+ * Please update the test case below to test the model.
+ */
+namespace OpenAPIServer\Model;
+
+use PHPUnit\Framework\TestCase;
+use OpenAPIServer\Model\ReadOnlyFirst;
+
+/**
+ * ReadOnlyFirstTest Class Doc Comment
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ *
+ * @coversDefaultClass \OpenAPIServer\Model\ReadOnlyFirst
+ */
+class ReadOnlyFirstTest extends TestCase
+{
+
+    /**
+     * Setup before running any test cases
+     */
+    public static function setUpBeforeClass()
+    {
+    }
+
+    /**
+     * Setup before running each test case
+     */
+    public function setUp()
+    {
+    }
+
+    /**
+     * Clean up after running each test case
+     */
+    public function tearDown()
+    {
+    }
+
+    /**
+     * Clean up after running all test cases
+     */
+    public static function tearDownAfterClass()
+    {
+    }
+
+    /**
+     * Test "ReadOnlyFirst"
+     */
+    public function testReadOnlyFirst()
+    {
+        $testReadOnlyFirst = new ReadOnlyFirst();
+    }
+
+    /**
+     * Test attribute "bar"
+     */
+    public function testPropertyBar()
+    {
+    }
+
+    /**
+     * Test attribute "baz"
+     */
+    public function testPropertyBaz()
+    {
+    }
+}
diff --git a/samples/server/petstore/php-slim4/test/Model/SpecialModelNameTest.php b/samples/server/petstore/php-slim4/test/Model/SpecialModelNameTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..a263f45a36fc2fd7f117a05cd4fb75ee50081b1c
--- /dev/null
+++ b/samples/server/petstore/php-slim4/test/Model/SpecialModelNameTest.php
@@ -0,0 +1,84 @@
+<?php
+/**
+ * SpecialModelNameTest
+ *
+ * PHP version 7.1
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+
+/**
+ * OpenAPI Petstore
+ *
+ * This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\
+ * The version of the OpenAPI document: 1.0.0
+ * Generated by: https://github.com/openapitools/openapi-generator.git
+ */
+
+/**
+ * NOTE: This class is auto generated by the openapi generator program.
+ * https://github.com/openapitools/openapi-generator
+ * Please update the test case below to test the model.
+ */
+namespace OpenAPIServer\Model;
+
+use PHPUnit\Framework\TestCase;
+use OpenAPIServer\Model\SpecialModelName;
+
+/**
+ * SpecialModelNameTest Class Doc Comment
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ *
+ * @coversDefaultClass \OpenAPIServer\Model\SpecialModelName
+ */
+class SpecialModelNameTest extends TestCase
+{
+
+    /**
+     * Setup before running any test cases
+     */
+    public static function setUpBeforeClass()
+    {
+    }
+
+    /**
+     * Setup before running each test case
+     */
+    public function setUp()
+    {
+    }
+
+    /**
+     * Clean up after running each test case
+     */
+    public function tearDown()
+    {
+    }
+
+    /**
+     * Clean up after running all test cases
+     */
+    public static function tearDownAfterClass()
+    {
+    }
+
+    /**
+     * Test "SpecialModelName"
+     */
+    public function testSpecialModelName()
+    {
+        $testSpecialModelName = new SpecialModelName();
+    }
+
+    /**
+     * Test attribute "specialPropertyName"
+     */
+    public function testPropertySpecialPropertyName()
+    {
+    }
+}
diff --git a/samples/server/petstore/php-slim4/test/Model/TagTest.php b/samples/server/petstore/php-slim4/test/Model/TagTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..a955e43e4eba7e55b5ec17b7a8448ddb87d749f2
--- /dev/null
+++ b/samples/server/petstore/php-slim4/test/Model/TagTest.php
@@ -0,0 +1,91 @@
+<?php
+/**
+ * TagTest
+ *
+ * PHP version 7.1
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+
+/**
+ * OpenAPI Petstore
+ *
+ * This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\
+ * The version of the OpenAPI document: 1.0.0
+ * Generated by: https://github.com/openapitools/openapi-generator.git
+ */
+
+/**
+ * NOTE: This class is auto generated by the openapi generator program.
+ * https://github.com/openapitools/openapi-generator
+ * Please update the test case below to test the model.
+ */
+namespace OpenAPIServer\Model;
+
+use PHPUnit\Framework\TestCase;
+use OpenAPIServer\Model\Tag;
+
+/**
+ * TagTest Class Doc Comment
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ *
+ * @coversDefaultClass \OpenAPIServer\Model\Tag
+ */
+class TagTest extends TestCase
+{
+
+    /**
+     * Setup before running any test cases
+     */
+    public static function setUpBeforeClass()
+    {
+    }
+
+    /**
+     * Setup before running each test case
+     */
+    public function setUp()
+    {
+    }
+
+    /**
+     * Clean up after running each test case
+     */
+    public function tearDown()
+    {
+    }
+
+    /**
+     * Clean up after running all test cases
+     */
+    public static function tearDownAfterClass()
+    {
+    }
+
+    /**
+     * Test "Tag"
+     */
+    public function testTag()
+    {
+        $testTag = new Tag();
+    }
+
+    /**
+     * Test attribute "id"
+     */
+    public function testPropertyId()
+    {
+    }
+
+    /**
+     * Test attribute "name"
+     */
+    public function testPropertyName()
+    {
+    }
+}
diff --git a/samples/server/petstore/php-slim4/test/Model/TypeHolderDefaultTest.php b/samples/server/petstore/php-slim4/test/Model/TypeHolderDefaultTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..85f07c91b7e2ec71f1f89f1bc8937608bd6520cb
--- /dev/null
+++ b/samples/server/petstore/php-slim4/test/Model/TypeHolderDefaultTest.php
@@ -0,0 +1,112 @@
+<?php
+/**
+ * TypeHolderDefaultTest
+ *
+ * PHP version 7.1
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+
+/**
+ * OpenAPI Petstore
+ *
+ * This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\
+ * The version of the OpenAPI document: 1.0.0
+ * Generated by: https://github.com/openapitools/openapi-generator.git
+ */
+
+/**
+ * NOTE: This class is auto generated by the openapi generator program.
+ * https://github.com/openapitools/openapi-generator
+ * Please update the test case below to test the model.
+ */
+namespace OpenAPIServer\Model;
+
+use PHPUnit\Framework\TestCase;
+use OpenAPIServer\Model\TypeHolderDefault;
+
+/**
+ * TypeHolderDefaultTest Class Doc Comment
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ *
+ * @coversDefaultClass \OpenAPIServer\Model\TypeHolderDefault
+ */
+class TypeHolderDefaultTest extends TestCase
+{
+
+    /**
+     * Setup before running any test cases
+     */
+    public static function setUpBeforeClass()
+    {
+    }
+
+    /**
+     * Setup before running each test case
+     */
+    public function setUp()
+    {
+    }
+
+    /**
+     * Clean up after running each test case
+     */
+    public function tearDown()
+    {
+    }
+
+    /**
+     * Clean up after running all test cases
+     */
+    public static function tearDownAfterClass()
+    {
+    }
+
+    /**
+     * Test "TypeHolderDefault"
+     */
+    public function testTypeHolderDefault()
+    {
+        $testTypeHolderDefault = new TypeHolderDefault();
+    }
+
+    /**
+     * Test attribute "stringItem"
+     */
+    public function testPropertyStringItem()
+    {
+    }
+
+    /**
+     * Test attribute "numberItem"
+     */
+    public function testPropertyNumberItem()
+    {
+    }
+
+    /**
+     * Test attribute "integerItem"
+     */
+    public function testPropertyIntegerItem()
+    {
+    }
+
+    /**
+     * Test attribute "boolItem"
+     */
+    public function testPropertyBoolItem()
+    {
+    }
+
+    /**
+     * Test attribute "arrayItem"
+     */
+    public function testPropertyArrayItem()
+    {
+    }
+}
diff --git a/samples/server/petstore/php-slim4/test/Model/TypeHolderExampleTest.php b/samples/server/petstore/php-slim4/test/Model/TypeHolderExampleTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..7e67b7b247796b0e440898bd26f205d049fd2371
--- /dev/null
+++ b/samples/server/petstore/php-slim4/test/Model/TypeHolderExampleTest.php
@@ -0,0 +1,119 @@
+<?php
+/**
+ * TypeHolderExampleTest
+ *
+ * PHP version 7.1
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+
+/**
+ * OpenAPI Petstore
+ *
+ * This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\
+ * The version of the OpenAPI document: 1.0.0
+ * Generated by: https://github.com/openapitools/openapi-generator.git
+ */
+
+/**
+ * NOTE: This class is auto generated by the openapi generator program.
+ * https://github.com/openapitools/openapi-generator
+ * Please update the test case below to test the model.
+ */
+namespace OpenAPIServer\Model;
+
+use PHPUnit\Framework\TestCase;
+use OpenAPIServer\Model\TypeHolderExample;
+
+/**
+ * TypeHolderExampleTest Class Doc Comment
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ *
+ * @coversDefaultClass \OpenAPIServer\Model\TypeHolderExample
+ */
+class TypeHolderExampleTest extends TestCase
+{
+
+    /**
+     * Setup before running any test cases
+     */
+    public static function setUpBeforeClass()
+    {
+    }
+
+    /**
+     * Setup before running each test case
+     */
+    public function setUp()
+    {
+    }
+
+    /**
+     * Clean up after running each test case
+     */
+    public function tearDown()
+    {
+    }
+
+    /**
+     * Clean up after running all test cases
+     */
+    public static function tearDownAfterClass()
+    {
+    }
+
+    /**
+     * Test "TypeHolderExample"
+     */
+    public function testTypeHolderExample()
+    {
+        $testTypeHolderExample = new TypeHolderExample();
+    }
+
+    /**
+     * Test attribute "stringItem"
+     */
+    public function testPropertyStringItem()
+    {
+    }
+
+    /**
+     * Test attribute "numberItem"
+     */
+    public function testPropertyNumberItem()
+    {
+    }
+
+    /**
+     * Test attribute "floatItem"
+     */
+    public function testPropertyFloatItem()
+    {
+    }
+
+    /**
+     * Test attribute "integerItem"
+     */
+    public function testPropertyIntegerItem()
+    {
+    }
+
+    /**
+     * Test attribute "boolItem"
+     */
+    public function testPropertyBoolItem()
+    {
+    }
+
+    /**
+     * Test attribute "arrayItem"
+     */
+    public function testPropertyArrayItem()
+    {
+    }
+}
diff --git a/samples/server/petstore/php-slim4/test/Model/UserTest.php b/samples/server/petstore/php-slim4/test/Model/UserTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..1e8b9a6e5a33c21777970fa387acb3b250b396f8
--- /dev/null
+++ b/samples/server/petstore/php-slim4/test/Model/UserTest.php
@@ -0,0 +1,133 @@
+<?php
+/**
+ * UserTest
+ *
+ * PHP version 7.1
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+
+/**
+ * OpenAPI Petstore
+ *
+ * This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\
+ * The version of the OpenAPI document: 1.0.0
+ * Generated by: https://github.com/openapitools/openapi-generator.git
+ */
+
+/**
+ * NOTE: This class is auto generated by the openapi generator program.
+ * https://github.com/openapitools/openapi-generator
+ * Please update the test case below to test the model.
+ */
+namespace OpenAPIServer\Model;
+
+use PHPUnit\Framework\TestCase;
+use OpenAPIServer\Model\User;
+
+/**
+ * UserTest Class Doc Comment
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ *
+ * @coversDefaultClass \OpenAPIServer\Model\User
+ */
+class UserTest extends TestCase
+{
+
+    /**
+     * Setup before running any test cases
+     */
+    public static function setUpBeforeClass()
+    {
+    }
+
+    /**
+     * Setup before running each test case
+     */
+    public function setUp()
+    {
+    }
+
+    /**
+     * Clean up after running each test case
+     */
+    public function tearDown()
+    {
+    }
+
+    /**
+     * Clean up after running all test cases
+     */
+    public static function tearDownAfterClass()
+    {
+    }
+
+    /**
+     * Test "User"
+     */
+    public function testUser()
+    {
+        $testUser = new User();
+    }
+
+    /**
+     * Test attribute "id"
+     */
+    public function testPropertyId()
+    {
+    }
+
+    /**
+     * Test attribute "username"
+     */
+    public function testPropertyUsername()
+    {
+    }
+
+    /**
+     * Test attribute "firstName"
+     */
+    public function testPropertyFirstName()
+    {
+    }
+
+    /**
+     * Test attribute "lastName"
+     */
+    public function testPropertyLastName()
+    {
+    }
+
+    /**
+     * Test attribute "email"
+     */
+    public function testPropertyEmail()
+    {
+    }
+
+    /**
+     * Test attribute "password"
+     */
+    public function testPropertyPassword()
+    {
+    }
+
+    /**
+     * Test attribute "phone"
+     */
+    public function testPropertyPhone()
+    {
+    }
+
+    /**
+     * Test attribute "userStatus"
+     */
+    public function testPropertyUserStatus()
+    {
+    }
+}
diff --git a/samples/server/petstore/php-slim4/test/Model/XmlItemTest.php b/samples/server/petstore/php-slim4/test/Model/XmlItemTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..c2024151fffe4e08f689908b04c1e1069aea8ebe
--- /dev/null
+++ b/samples/server/petstore/php-slim4/test/Model/XmlItemTest.php
@@ -0,0 +1,280 @@
+<?php
+/**
+ * XmlItemTest
+ *
+ * PHP version 7.1
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ */
+
+/**
+ * OpenAPI Petstore
+ *
+ * This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\
+ * The version of the OpenAPI document: 1.0.0
+ * Generated by: https://github.com/openapitools/openapi-generator.git
+ */
+
+/**
+ * NOTE: This class is auto generated by the openapi generator program.
+ * https://github.com/openapitools/openapi-generator
+ * Please update the test case below to test the model.
+ */
+namespace OpenAPIServer\Model;
+
+use PHPUnit\Framework\TestCase;
+use OpenAPIServer\Model\XmlItem;
+
+/**
+ * XmlItemTest Class Doc Comment
+ *
+ * @package OpenAPIServer\Model
+ * @author  OpenAPI Generator team
+ * @link    https://github.com/openapitools/openapi-generator
+ *
+ * @coversDefaultClass \OpenAPIServer\Model\XmlItem
+ */
+class XmlItemTest extends TestCase
+{
+
+    /**
+     * Setup before running any test cases
+     */
+    public static function setUpBeforeClass()
+    {
+    }
+
+    /**
+     * Setup before running each test case
+     */
+    public function setUp()
+    {
+    }
+
+    /**
+     * Clean up after running each test case
+     */
+    public function tearDown()
+    {
+    }
+
+    /**
+     * Clean up after running all test cases
+     */
+    public static function tearDownAfterClass()
+    {
+    }
+
+    /**
+     * Test "XmlItem"
+     */
+    public function testXmlItem()
+    {
+        $testXmlItem = new XmlItem();
+    }
+
+    /**
+     * Test attribute "attributeString"
+     */
+    public function testPropertyAttributeString()
+    {
+    }
+
+    /**
+     * Test attribute "attributeNumber"
+     */
+    public function testPropertyAttributeNumber()
+    {
+    }
+
+    /**
+     * Test attribute "attributeInteger"
+     */
+    public function testPropertyAttributeInteger()
+    {
+    }
+
+    /**
+     * Test attribute "attributeBoolean"
+     */
+    public function testPropertyAttributeBoolean()
+    {
+    }
+
+    /**
+     * Test attribute "wrappedArray"
+     */
+    public function testPropertyWrappedArray()
+    {
+    }
+
+    /**
+     * Test attribute "nameString"
+     */
+    public function testPropertyNameString()
+    {
+    }
+
+    /**
+     * Test attribute "nameNumber"
+     */
+    public function testPropertyNameNumber()
+    {
+    }
+
+    /**
+     * Test attribute "nameInteger"
+     */
+    public function testPropertyNameInteger()
+    {
+    }
+
+    /**
+     * Test attribute "nameBoolean"
+     */
+    public function testPropertyNameBoolean()
+    {
+    }
+
+    /**
+     * Test attribute "nameArray"
+     */
+    public function testPropertyNameArray()
+    {
+    }
+
+    /**
+     * Test attribute "nameWrappedArray"
+     */
+    public function testPropertyNameWrappedArray()
+    {
+    }
+
+    /**
+     * Test attribute "prefixString"
+     */
+    public function testPropertyPrefixString()
+    {
+    }
+
+    /**
+     * Test attribute "prefixNumber"
+     */
+    public function testPropertyPrefixNumber()
+    {
+    }
+
+    /**
+     * Test attribute "prefixInteger"
+     */
+    public function testPropertyPrefixInteger()
+    {
+    }
+
+    /**
+     * Test attribute "prefixBoolean"
+     */
+    public function testPropertyPrefixBoolean()
+    {
+    }
+
+    /**
+     * Test attribute "prefixArray"
+     */
+    public function testPropertyPrefixArray()
+    {
+    }
+
+    /**
+     * Test attribute "prefixWrappedArray"
+     */
+    public function testPropertyPrefixWrappedArray()
+    {
+    }
+
+    /**
+     * Test attribute "namespaceString"
+     */
+    public function testPropertyNamespaceString()
+    {
+    }
+
+    /**
+     * Test attribute "namespaceNumber"
+     */
+    public function testPropertyNamespaceNumber()
+    {
+    }
+
+    /**
+     * Test attribute "namespaceInteger"
+     */
+    public function testPropertyNamespaceInteger()
+    {
+    }
+
+    /**
+     * Test attribute "namespaceBoolean"
+     */
+    public function testPropertyNamespaceBoolean()
+    {
+    }
+
+    /**
+     * Test attribute "namespaceArray"
+     */
+    public function testPropertyNamespaceArray()
+    {
+    }
+
+    /**
+     * Test attribute "namespaceWrappedArray"
+     */
+    public function testPropertyNamespaceWrappedArray()
+    {
+    }
+
+    /**
+     * Test attribute "prefixNsString"
+     */
+    public function testPropertyPrefixNsString()
+    {
+    }
+
+    /**
+     * Test attribute "prefixNsNumber"
+     */
+    public function testPropertyPrefixNsNumber()
+    {
+    }
+
+    /**
+     * Test attribute "prefixNsInteger"
+     */
+    public function testPropertyPrefixNsInteger()
+    {
+    }
+
+    /**
+     * Test attribute "prefixNsBoolean"
+     */
+    public function testPropertyPrefixNsBoolean()
+    {
+    }
+
+    /**
+     * Test attribute "prefixNsArray"
+     */
+    public function testPropertyPrefixNsArray()
+    {
+    }
+
+    /**
+     * Test attribute "prefixNsWrappedArray"
+     */
+    public function testPropertyPrefixNsWrappedArray()
+    {
+    }
+}