Reputation: 26460
I wonder if there is a way to get the composer.json
version from a controller with Symfony. My composer.json
looks like:
{
"name": "myProject",
"version": "0.0.0",
"description": "myProject description",
"license": "AGPL-3.0",
"type": "project",
"require": {
"php": "^7.1.3",
...
}
}
I can't find any reference to this.
PS: I'm using Symfony 4.
Upvotes: 6
Views: 3817
Reputation: 11
In Symfony 6 u have to do the following 3 Steps:
twig:
globals:
composer_version: '@App\Helper\ComposerVersion'
namespace App\Helper;
use Composer\InstalledVersions;
class ComposerVersion
{
public static function getVersion(): string
{
return InstalledVersions::getRootPackage()['pretty_version'];
}
public function __toString(): string
{
return self::getVersion();
}
}
<div>{{ composer_version }}</div>
Upvotes: 1
Reputation: 1013
Reffering Salam answer, you can also get own project (named root package
in composer world) version stored in composer.json
by:
$version = \Composer\InstalledVersions::getRootPackage()['version'];
or for prettier print:
$version = \Composer\InstalledVersions::getRootPackage()['pretty_version'];
Upvotes: 2
Reputation: 1168
Without packages, with Composer you can use $version = \Composer\InstalledVersions::getPrettyVersion('package/package-name')
Upvotes: 3
Reputation: 2310
You can use the PackageVersions library and its relative PrettyPackageVersions.
They provide a single class API to get the currently installed version of your Composer dependencies, for example:
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');
Upvotes: 2
Reputation: 17166
You can do something like this:
$filename = $this->getParameter('%app.kernel_dir%') . '/../composer.json';
$composerData = json_decode(file_get_contents($filename), true);
$version = $composerData['version'];
The variable should then containv the value 0.0.0
from your example.
This assumes that your controller extends the base Controller to access the %app.kernel_dir%
parameter. If not, you could just as well use the relative path from your controller or something else to determine the location of the composer.json
Upvotes: 7