上一篇已经在CodeIgniter 3 框架上集成了swagger-php3,可以输入json格式的数据,这样不直不雅观,接着做swagger-UI集成到框加的考试测验。
与利用composer安装swagger-php不同,这次直接从站点下载UI库,站点地址是:https://github.com/swagger-api/swagger-ui/releases 选最新版就可以,我下载的是swagger-ui-5.11.8。
下载并解压后,把这个目录直接复制到CI框的根目录的static目录下,这里放着一些第三方的js类的库文件。实际我们要用到是swagger-ui-5.11.8/dist目录的文件。

UI库文件准备好了,下面要把扫描的json数据记录的文件里,我在框的根目录新建了一个public目录,用于存在swagger.js文件。
有一个必要的 view文件要新建,它的位置和名称是application/view/swagger.php,这个文件用于利用天生的json文件再调用UI库的方法加工出俊秀的界面,它的内容如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title><?php echo $title;?></title>
<link rel="stylesheet" type="text/css" href="<?php echo base_url(); ?>static/swagger-ui-5.11.8/dist/swagger-ui.css">
</head>
<body>
<div id="swagger-ui"></div>
<script src="<?php echo base_url(); ?>static/swagger-ui-5.11.8/dist/swagger-ui-bundle.js"></script>
<script src="<?php echo base_url(); ?>static/swagger-ui-5.11.8/dist/swagger-ui-standalone-preset.js"></script>
<script>
window.onload = function() {
const ui = SwaggerUIBundle({
url: "<?php echo base_url(); ?>public/swagger.json",
dom_id: "#swagger-ui",
presets: [
SwaggerUIBundle.presets.apis,
SwaggerUIStandalonePreset
],
layout: "BaseLayout"
});
}
</script>
</body>
</html>
好了,剩下末了一步了,改造一下掌握器文件,它在这个位置 application/controller/swagger.php,修正后的内容如下:
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
require_once APPPATH . '/third_party/vendor/autoload.php';
use OpenApi\Annotations as OA;
class Swagger extends CI_Controller
{
function __construct()
{
parent::__construct();
}
public function index()
{
if($this->scan_api()) {
$data['title'] = 'Swagger UI';
$this->load->view('swagger', $data);
} else {
echo "Create Swagger File Error";
}
}
private function scan_api()
{
$path = APPPATH . '/controllers/api';
$openapi = \OpenApi\scan($path);
if(file_put_contents(FCPATH.'/public/swagger.json', $openapi->toJson())) {
return true;
} else {
return false;
}
}
}
好了,见证奇迹的时候到了,在浏览器输入: http://swagger.test.com/swagger
正常是这样显示的: