0

我正在尝试从shields.io创建一个自定义盾牌。我尝试了创建端点的路线,json但由于可访问性问题,这对我不起作用。我想出了一个解决方法,我从我的 php 端调用 shields.io 链接,然后将其返回到一个端点,然后从我的标签中的mdREADME 文件中调用该端点。<img>

如果我在浏览器中输入网址,它工作正常,我看到了盾牌。如果我尝试<img>在我的 README 中的标签中使用该 url,它就不起作用。我意识到这是因为我<html>从我的 php.ini 返回了额外的元素。这是我的代码:

php:

$router->get('/badge', function (AssetsManifestGateway $assetsManifestGateway) {
  $appVersion = $assetsManifestGateway->getAppVersion();

  $shield = file_get_contents("https://img.shields.io/static/v1?label=". config('app.partner_code'). "_". config('app.env'). "&message=". $appVersion);
  return $shield; 
});

自述文件:

<img src="http://<my url>/badge">

在我的浏览器中访问 url 时的响应:

<html>
 <head>
 </head>
 <body>
  <svg xmlns="http://www.w3.org/2000/svg">
   <extra content>
  </svg>
 </body>
</html>

所以我基本上只想返回<svg>该响应的一部分。这可能吗?

4

1 回答 1

1

你的问题

通过从 shields.io ( file_get_contents) 获取徽章并返回 svg 徽章,您实际上使您的服务器相信您返回的是 html(请参阅<svg></svg>标签)。

我尝试了创建端点的路线,json但由于可访问性问题,这对我不起作用。

不久前我有类似的问题。我通过使用 php 创建屏蔽端点来解决它。

这样您就可以使用 php 创建 JSON 并让 shields 服务器从中创建一个徽章 - 而不是从 shields.io 获取和返回徽章(您所做的)。

回答您问题的代码

我总是使用这个函数来创建我的徽章,因为抽象在这里看起来非常有用:

function createBadgeJson($label, $message, $color="green") {
  return "{
\"schemaVersion\": 1,
\"label\": \"$label\",
\"message\": \"$message\",
\"color\": \"$color\"
}";
}

要创建您在上面尝试创建的徽章,请将其放入您的 php 文件中:

$appVersion = $assetsManifestGateway->getAppVersion();

echo createBadgeJson(config('app.partner_code'), $appVersion);

您可以像这样在降价中使用您的徽章:

![your badge](https://img.shields.io/endpoint?url=https://your-endpoint-domain.com/your-badge-path)

或者在 HTML中使用上面的链接格式作为图像源。


资源

于 2020-07-07T19:30:22.667 回答