Manolo
Manolo

Reputation: 26460

Get version from composer.json [Symfony]

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

Answers (5)

cooolinho
cooolinho

Reputation: 11

In Symfony 6 u have to do the following 3 Steps:

  1. Create global Variable in packages/twig.yaml and reference a Service as Value

twig:
    globals:
        composer_version: '@App\Helper\ComposerVersion'

  1. Create (Service) 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();
    }
}

  1. Use in twig Template:

<div>{{ composer_version }}</div>

Upvotes: 1

Łukasz Jakubek
Łukasz Jakubek

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

Salam
Salam

Reputation: 1168

Without packages, with Composer you can use $version = \Composer\InstalledVersions::getPrettyVersion('package/package-name')

Upvotes: 3

Edi Modrić
Edi Modrić

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

dbrumann
dbrumann

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

Related Questions