标题说明了。有没有办法从编辑器获取应用程序当前使用的版本,而无需调用composer show -i
或类似的东西?
我希望这样,以便我可以确定应用程序当前使用的版本,以及是否需要更新以显示警报并最终自动更新。
答案 0 :(得分:3)
对于我认为的当前任务,适当的解决方案如下:
Composer在 vendor / composer 下创建一个名为 installed.json 的文件,其中包含有关已安装软件包的所有信息,因为它们是定义
该文件看起来与此类似:
[
{
"name": "vendor_X/package_Y",
"version": "1.0.0",
"version_normalized": "1.1.0.0",
"source": {},
"dist": {},
"require": {},
"require-dev": {},
other data about tha package
},
{"..other package's data..": ""},
{"...": ""}
]
一个简单的解决方案是:
$data = array();
$packages = json_decode(file_get_contents('../vendor/composer/installed.json'));
// Assuming that the project root is one level above the web root.
foreach ($packages as $package) {
$data[$package['name']] = $package['version'];
}
// make a curl request to packagist.org to get the package data
// https://packagist.org/packages/vendor_X/package_Y.json
// The output is something like the following:
/*
{
"package": {
"name": "omnipay/dummy",
"versions": {
"dev-master": {},
"v1.1.0": {},
"v1.0.0": {}
},
"type": "library",
}
}
*/
$packagist = json_decode($packagist_reponse_as_json);
if (strcmp($data['vendor_X/package_Y'], $packagist['package']['versions'][1]) < 0) {
// Fire a composer update, send email alert, show notification or call the president
}
上面的解决方案最简单,有点难看,但它显示了关键点,即从哪里获取包的本地版本以及如何从composer获取包版本。
更实际的解决方案应该采用缓存,不应该在正常的应用程序操作期间完成,更好的解决方案将是Cron Job。