Skip to content

Commit

Permalink
Merge pull request #17 from xl32/master
Browse files Browse the repository at this point in the history
Swagger / OpenAPI 3.0 support, migration to Laminas
  • Loading branch information
davidwindell authored Jan 12, 2021
2 parents 5d27e32 + cfbbf86 commit 56d8eae
Show file tree
Hide file tree
Showing 6 changed files with 48 additions and 42 deletions.
14 changes: 7 additions & 7 deletions composer.json
Original file line number Diff line number Diff line change
@@ -1,20 +1,20 @@
{
"name": "outeredge/swagger-module",
"description": "Zend Framework Module for Swagger resource file generation",
"description": "Laminas Framework Module for Swagger resource file generation",
"type": "library",
"license": "Apache-2.0",
"homepage": "https://github.com/outeredge/SwaggerModule",
"keywords": [
"api",
"rest",
"zf2",
"zf3",
"swagger"
"laminas",
"swagger",
"openapi"
],
"require": {
"php": "^5.6 || ^7.0",
"zendframework/zend-servicemanager": "^2.7.6 || ^3.1",
"zircote/swagger-php": "~2.0"
"php": "^7.0",
"laminas/laminas-servicemanager": "^3.1",
"zircote/swagger-php": "~3.0"
},
"autoload": {
"psr-0": {
Expand Down
9 changes: 6 additions & 3 deletions config/swagger.global.php.dist
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,12 @@ return array(
'output' => 'array',
'json_pretty_print' => true, // for outputtype 'json'
'defaultApiVersion' => null,
'defaultBasePath' => null, // e.g. /api
'defaultHost' => null, // example.com
'schemes' => null, // e.g. ['http', 'https'],
'servers' => [
[
'url' => 'https://example.com/api/v1', // servers replaces the host, basePath and schemes keywords used in OpenAPI 2.0.
'description' => null, // e.g. "Production server (uses live data)"
],
],
),
)
);
12 changes: 6 additions & 6 deletions src/SwaggerModule/Controller/DocumentationController.php
Original file line number Diff line number Diff line change
Expand Up @@ -20,19 +20,19 @@

namespace SwaggerModule\Controller;

use Swagger\Annotations\Swagger;
use Zend\Mvc\Controller\AbstractActionController;
use Zend\View\Model\JsonModel;
use OpenApi\Annotations\OpenApi;
use Laminas\Mvc\Controller\AbstractActionController;
use Laminas\View\Model\JsonModel;

/**
* DocumentationController. It is used to display a documentation in HTML
*/
class DocumentationController extends AbstractActionController
{
protected $swagger;
protected $openApi;

public function setSwagger(Swagger $swagger) {
$this->swagger = $swagger;
public function setOpenApi(OpenApi $openApi) {
$this->swagger = $openApi;
}

/**
Expand Down
14 changes: 7 additions & 7 deletions src/SwaggerModule/Controller/DocumentationControllerFactory.php
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,10 @@
namespace SwaggerModule\Controller;

use Interop\Container\ContainerInterface;
use Swagger\Annotations\Swagger;
use Zend\ServiceManager\AbstractFactoryInterface;
use Zend\ServiceManager\AbstractPluginManager;
use Zend\ServiceManager\ServiceLocatorInterface;
use OpenApi\Annotations\OpenApi;
use Laminas\ServiceManager\AbstractFactoryInterface;
use Laminas\ServiceManager\AbstractPluginManager;
use Laminas\ServiceManager\ServiceLocatorInterface;

class DocumentationControllerFactory implements AbstractFactoryInterface
{
Expand All @@ -41,9 +41,9 @@ public function canCreateServiceWithName(ServiceLocatorInterface $services, $nam
public function __invoke(ContainerInterface $container, $requestedName, array $options = null)
{
$controller = new DocumentationController();
/** @var Swagger $swagger */
$swagger = $container->get('Swagger\Annotations\Swagger');
$controller->setSwagger($swagger);
/** @var OpenApi $openApi */
$openApi = $container->get('OpenApi\Annotations\OpenApi');
$controller->setOpenApi($openApi);
return $controller;
}

Expand Down
39 changes: 21 additions & 18 deletions src/SwaggerModule/Module.php
Original file line number Diff line number Diff line change
Expand Up @@ -22,12 +22,12 @@

use RuntimeException;
use SwaggerModule\Options\ModuleOptions as SwaggerModuleOptions;
use Swagger\StaticAnalyser as SwaggerStaticAnalyser;
use Swagger\Analysis as SwaggerAnalysis;
use Swagger\Util as SwaggerUtil;
use Zend\Console\Adapter\AdapterInterface;
use Zend\ModuleManager\Feature\ConfigProviderInterface;
use Zend\ModuleManager\Feature\ServiceProviderInterface;
use OpenApi\StaticAnalyser as OpenApiStaticAnalyser;
use OpenApi\Analysis as OpenApiAnalysis;
use OpenApi\Util as OpenApiUtil;
use Laminas\Console\Adapter\AdapterInterface;
use Laminas\ModuleManager\Feature\ConfigProviderInterface;
use Laminas\ModuleManager\Feature\ServiceProviderInterface;

/**
* SwaggerModule
Expand Down Expand Up @@ -64,17 +64,17 @@ public function getServiceConfig()
return new SwaggerModuleOptions($config);
},

'Swagger\Annotations\Swagger' => function($serviceManager) {
'OpenApi\Annotations\OpenApi' => function($serviceManager) {
/** @var $options \SwaggerModule\Options\ModuleOptions */
$options = $serviceManager->get('SwaggerModule\Options\ModuleOptions');
$analyser = new SwaggerStaticAnalyser();
$analysis = new SwaggerAnalysis();
$processors = SwaggerAnalysis::processors();
$analyser = new OpenApiStaticAnalyser();
$analysis = new OpenApiAnalysis();
$processors = OpenApiAnalysis::processors();

// Crawl directory and parse all files
$paths = $options->getPaths();
foreach($paths as $directory) {
$finder = SwaggerUtil::finder($directory);
$finder = OpenApiUtil::finder($directory);
foreach ($finder as $file) {
$analysis->addAnalysis($analyser->fromFile($file->getPathname()));
}
Expand All @@ -86,17 +86,20 @@ public function getServiceConfig()

// Pass options to analyzer
$resourceOptions = $options->getResourceOptions();
if(!empty($resourceOptions['defaultBasePath'])) {
$analysis->swagger->basePath = $resourceOptions['defaultBasePath'];
if(! empty($resourceOptions['servers'])) {
$analysis->openapi->servers = $resourceOptions['servers'];
}
if(!empty($resourceOptions['defaultHost'])) {
$analysis->swagger->host = $resourceOptions['defaultHost'];
if(! empty($resourceOptions['defaultBasePath'])) {
$analysis->openapi->servers['basePath'] = $resourceOptions['defaultBasePath'];
}
if(!empty($resourceOptions['schemes'])) {
$analysis->swagger->schemes = $resourceOptions['schemes'];
if(! empty($resourceOptions['defaultHost'])) {
$analysis->openapi->servers['host'] = $resourceOptions['defaultHost'];
}
if(! empty($resourceOptions['schemes'])) {
$analysis->openapi->servers['schemes'] = $resourceOptions['schemes'];
}

return $analysis->swagger;
return $analysis->openapi;
},
)
);
Expand Down
2 changes: 1 addition & 1 deletion src/SwaggerModule/Options/ModuleOptions.php
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
namespace SwaggerModule\Options;

use DirectoryIterator;
use Zend\Stdlib\AbstractOptions;
use Laminas\Stdlib\AbstractOptions;

/**
* ModuleOptions
Expand Down

0 comments on commit 56d8eae

Please sign in to comment.