【问题标题】:Swagger is not working in integration with ZendFramework2Swagger 未与 ZendFramework2 集成
【发布时间】:2015-02-24 12:34:43
【问题描述】:

您能否建议为什么 Swagger 在与 ZendFramework2 集成时不适合我。我按照here 给出的说明进行操作。

composer.json

{
    "require": {
        "php": ">=5.3.3",
        "zendframework/zendframework": "2.3.5",
        "outeredge/swagger-module": "dev-master"
    },
}

config/application.config.php

<?php
    return array(
        'modules' => array(
            'MyApp',
            'SwaggerModule',
        ),
        'module_listener_options' => array(
            'module_paths' => array(
                './module',
                './vendor',
            ),
        ),
    );
?>

/config/autoload/swagger.global.php

return array(
    'swagger' => array(
        'paths' => array(
            __DIR__ . '/../../module/Morpho/src/Morpho/Controller',
        ),
        'resource_options' => array(
            'output' => 'array',
            'json_pretty_print' => true, // for outputtype 'json'
            'defaultBasePath' => null,
            'defaultApiVersion' => null,
            'defaultSwaggerVersion' => '1.2',
        ),
    )
);

在Apache下部署应用程序后,当调用http://myapp/public/api/docs时,我得到:

{"errors":[{"message":"An error occurred during execution;
please try again later.","error":"error-exception","exception":
"class":"Zend\ServiceManager\Exception\ServiceNotCreatedException",
"file":"\vendor\zendframework\zendframework\library\Zend\ServiceManager\ServiceManager.php",
"line":930,
"message":"An exception was raised while creating "Swagger\Swagger";
no instance returned"

堆栈跟踪

 0 \vendor\zendframework\zendframework\library\Zend\ServiceManager\ServiceManager.php(1057): Zend\ServiceManager\ServiceManager->createServiceViaCallback(Object(Closure), 'swaggerswagger', 'Swagger\Swagger')
 1 \vendor\zendframework\zendframework\library\Zend\ServiceManager\ServiceManager.php(633): Zend\ServiceManager\ServiceManager->createFromFactory('swaggerswagger', 'Swagger\Swagger')
 2 \vendor\zendframework\zendframework\library\Zend\ServiceManager\ServiceManager.php(593): Zend\ServiceManager\ServiceManager->doCreate('Swagger\Swagger', 'swaggerswagger')
 3 \vendor\zendframework\zendframework\library\Zend\ServiceManager\ServiceManager.php(525): Zend\ServiceManager\ServiceManager->create(Array)
 4 \vendor\outeredge\swagger-module\src\SwaggerModule\Controller\DocumentationController.php(39): Zend\ServiceManager\ServiceManager->get('Swagger\Swagger')
 5 \vendor\zendframework\zendframework\library\Zend\Mvc\Controller\AbstractActionController.php(83): SwaggerModule\Controller\DocumentationController->displayAction()
 6 [internal function]: Zend\Mvc\Controller\AbstractActionController->onDispatch(Object(Zend\Mvc\MvcEvent))
 7 \vendor\zendframework\zendframework\library\Zend\EventManager\EventManager.php(468): call_user_func(Array, Object(Zend\Mvc\MvcEvent))
 8 \vendor\zendframework\zendframework\library\Zend\EventManager\EventManager.php(207): Zend\EventManager\EventManager->triggerListeners('dispatch', Object(Zend\Mvc\MvcEvent), Object(Closure))
 9 \vendor\zendframework\zendframework\library\Zend\Mvc\Controller\AbstractController.php(116): Zend\EventManager\EventManager->trigger('dispatch', Object(Zend\Mvc\MvcEvent), Object(Closure))
 10 \vendor\zendframework\zendframework\library\Zend\Mvc\DispatchListener.php(113): Zend\Mvc\Controller\AbstractController->dispatch(Object(Zend\Http\PhpEnvironment\Request), Object(Zend\Http\PhpEnvironment\Response))
 11 [internal function]: Zend\Mvc\DispatchListener->onDispatch(Object(Zend\Mvc\MvcEvent))
 12 \vendor\zendframework\zendframework\library\Zend\EventManager\EventManager.php(468): call_user_func(Array, Object(Zend\Mvc\MvcEvent))
 13 \vendor\zendframework\zendframework\library\Zend\EventManager\EventManager.php(207): Zend\EventManager\EventManager->triggerListeners('dispatch', Object(Zend\Mvc\MvcEvent), Object(Closure))
 14 \vendor\zendframework\zendframework\library\Zend\Mvc\Application.php(313): Zend\EventManager\EventManager->trigger('dispatch', Object(Zend\Mvc\MvcEvent), Object(Closure))
 15 \public\index.php(10): Zend\Mvc\Application->run()
 16 {main}"}}]}

【问题讨论】:

    标签: php zend-framework zend-framework2 swagger


    【解决方案1】:

    swagger-module 似乎没有激活。请改用https://github.com/zircote/swagger-php

    【讨论】:

      【解决方案2】:

      我遇到了相同类型的错误,并且能够通过以下方式解决问题。

      1)\config\autoload 中创建 swagger.local.php 文件 在开发系统swagger.development.php中)

      2) swagger.local.php 有以下内容。

      return array(
          'swagger' => array(
              'paths' => array(
                  __DIR__ . '/../../module/Api/src/Api/Controller',
              ),
              'resource_options' => array(
                  'output' => 'array',
                  'json_pretty_print' => true, 
                  'defaultBasePath' => '/',
                  'defaultApiVersion' => null,
                  'defaultSwaggerVersion' => '1.2',
              ),
          )
      );
      

      谢谢

      http://www.web-technology-experts-notes.in

      【讨论】: