我该如何在Laravel中提供生成的phpDocumentor文档?

5

我正在使用phpDocumentor 3为我的Laravel 7项目生成文档,

想知道是否可以从Laravel中提供(静态文件)这些文档,以便仅供授权用户使用。

我希望能够通过我的CI/CD更新文档,因此不能手动修改生成的文档。

我认为我可能需要编写自己的模板(https://docs.phpdoc.org/3.0/guide/guides/templates.html),但我不确定是否缺少文档或是否遗漏了什么,因为我不知道如何创建模板。请问是否有任何建议、指南或教程可以帮助我实现这一点?
谢谢

1个回答

1

您可以在CI/CD脚本中包含phpDoc生成:

首先在生产环境上安装phpDocumentor,然后使用以下命令生成:

phpDocumentor -d . -t storage/docs/ 

注意:如果您计划生成phpDocs而不是在生产服务器上,那么storage路径可能会被忽略,并且您必须确保该文件夹将被推送到生产环境。请将以下内容添加到config/filesystem.php的“disks”中:
'local-docs' => [
            'driver' => 'local',
            'root' => storage_path('docs'),
        ],

在你的路由文件 (routes/web.php) 中添加以下内容:

Route::get('/docs/{url?}', function ($url) {
    $resp = response(Storage::disk('local-docs')->get($url));
    $resp->header('content-type', GuzzleHttp\Psr7\MimeType::fromFilename($url));
    return $resp;

})->where('url', '(.*)')->middleware('auth');

请确保您没有任何其他带有“docs”前缀的路径。

1
我已经测试过了^^' 它有点工作,但是CSS没有应用,我进行了快速比较,并发现尽管CSS已经被下载,但它没有被应用,我认为这可能与缺少响应头有关?就像在普通页面上一样,我有'content-type:text / css',但在文档中,CSS返回为'content-type:text / html',所以我添加了一些头部到你的答案中,现在它可以工作了,谢谢! - hereForLearing
1
Route::get('/docs/{url?}', function ($url) { $resp = response(Storage::disk('local-docs')->get($url)); if(preg_match('/(.*.css)/', $url)) $resp->header('content-type', 'text/css'); else if(preg_match('/(.*.js)/', $url)) $resp->header('content-type', 'application/javascript'); return $resp; })->where('url', '(.*)'); - hereForLearing
1
可能会影响文档的主要类型是JavaScript / CSS,因此我没有涵盖其他情况,但我相信有更好的方法可以解决这个问题。如果您能使用我的代码(或更好的解决方案)更新您的答案,那就太好了,谢谢! - hereForLearing
1
@hereForLearning 谢谢,我已经根据你的 MIME 类型更正更新了我的答案。很高兴你的问题得到了解决。 - Abilogos
1
好的,最后一次更新(希望如此^^):我们可以通过以下方式从扩展名获取MimeType,而无需使用if/else语句:$resp->header('content-type', GuzzleHttp\Psr7\MimeType::fromFilename($url)); - hereForLearing
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接