我想知道是否有办法从Symfony的控制器获取composer.json
版本。我的composer.json
看起来像是:
{
"name": "myProject",
"version": "0.0.0",
"description": "myProject description",
"license": "AGPL-3.0",
"type": "project",
"require": {
"php": "^7.1.3",
...
}
}
我无法找到任何参考资料。
PS:我正在使用Symfony 4.
答案 0 :(得分:3)
您可以这样做:
$filename = $this->getParameter('%app.kernel_dir%') . '/../composer.json';
$composerData = json_decode(file_get_contents($filename), true);
$version = $composerData['version'];
该变量应该包含来自您示例的值0.0.0
。
这假设您的控制器扩展了基本控制器以访问%app.kernel_dir%
参数。如果没有,你也可以使用你的控制器或其他东西的相对路径来确定composer.json的位置
答案 1 :(得分:2)
您可以使用PackageVersions库及其相对PrettyPackageVersions。
它们提供单个类API来获取当前安装的Composer依赖项版本,例如:
use PackageVersions\Versions;
use Jean85\PrettyVersions;
// Will output "1.0.0@0beec7b5ea3f0fdbc95d0dd47f3c5bc275da8a33"
echo Versions::getVersion('myvendor/mypackage');
// Will output "1.0.0"
echo (string) PrettyVersions::getVersion('myvendor/mypackage');
答案 2 :(得分:0)
没有软件包,通过Composer,您可以使用$version = \Composer\InstalledVersions::getPrettyVersion('package/package-name')
答案 3 :(得分:0)
参考 Salam 答案,您还可以通过以下方式获取存储在 root package
中的自己的项目(在 composer world 中名为 composer.json
)版本:
$version = \Composer\InstalledVersions::getRootPackage()['version'];
或者为了更漂亮的打印:
$version = \Composer\InstalledVersions::getRootPackage()['pretty_version'];