Laravel
Apidoc官网文档(传送门 https://docs.apidoc.icu)
Apidoc是一个通过解析注解生成Api接口文档的PHPcomposer扩展,虽然兼容Laravel、ThinkPHP、Hyperf、Webman等框架,但是在使用Lumen开发的过程中,因为Lumen框架阉割的比较厉害,有一些方法被删除,故造成了ApiDoc无法使用。为此专门进行研究,找到问题根源进行简单的处理,若您有更好的解决方法,可以提供一下,参考优化该文章。
Lumen版Apidoc安装
进入项目根目录,执行如下命令:
composer require hg/apidoc
手动将 /vendor/hg/apidoc/src/config.php
拷贝到/config/
目录下,并重命名为apidoc.php
在/bootstrap/app.php 中添加下面一行代码,
$app->register(hg\apidoc\providers\LaravelService::class);
手动配置 /vendor/laravel/lumne-framework/src/Routing/Router.php
,将下面的代码,直接复制粘贴即可。(目前的问题是,若进行composer安装或更新,我们手动添加的代码,可能被重置)
/** * Register a new route responding to all verbs. * * @param string $uri * @param array|string|callable|null $action * @return \Illuminate\Routing\Route */ public function any($uri, $action = null) { $this->addRoute(['GET','POST','PUT'], $uri, $action); return $this; } /** * Get or set the middlewares attached to the route. * * @param array|string|null $middleware * @return $this|array */ public function middleware($middleware = null) { if (is_null($middleware)) { return (array) ($this->action['middleware'] ?? []); } if (! is_array($middleware)) { $middleware = func_get_args(); } foreach ($middleware as $index => $value) { $middleware[$index] = (string) $value; } $this->action['middleware'] = array_merge( (array) ($this->action['middleware'] ?? []), $middleware ); return $this; }
由于框架会对全局异常进行处理,如apidoc的异常未被正确响应,会导致页面打不开或报错,配置以下异常处理来解决问题。
修改文件app/Exceptions/Handler.php
,增加一下代码:
public function register() { $this->reportable(function (Throwable $e) { if ($e instanceof \hg\apidoc\exception\HttpException) { return abort( $e->getStatusCode(), $e->getMessage() ); } }); }
下载完成后解压,将apidoc文件夹拷贝到你的项目 public 目录下
打开浏览器访问 http://你的域名/apidoc/,出现接口文档页面,表示安装。