Récupérer les versions de Symfony et PHP de l'environnement courant
Publié le 15/01/2019 • Actualisé le 06/01/2023
Il est parfois utile d'avoir ces informations. Il y a plusieurs manières d'obtenir la version de Symfony. En CLI, on peut utiliser la commande bin/console --version
ou composer info symfony/http-kernel | grep versions
. On peut aussi voir la version dans le profiler Symfony.
Dans ce projet, par exemple, elles sont affichées pour vous montrer l'environnement sur lequel est exécuté le code pour que vous puissiez comparer avec le vôtre. Ça permet d'éviter d'utiliser du code en dur, mais également d'être automatiquement à jour en cas d'actualisation de composer ou du système.
<?php declare(strict_types=1);
namespace App\Twig\Extension;
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\HttpKernel\Kernel;
/**
* Server environment related stuff.
*/
class EnvExtension extends \Twig_Extension implements \Twig_Extension_GlobalsInterface
{
public function getGlobals(): array
{
$phpVersion = PHP_VERSION;
$parts = explode('.', $phpVersion);
$phpMinorVersion = $parts[0].'.'.$parts[1];
$phpVersion = $phpMinorVersion.'.'.explode('-', $parts[2])[0] ?? '';
$sfVersion = Kernel::VERSION;
$sfVersionInfos = explode('.', Kernel::VERSION);
$globals = [
'php_version' => $phpVersion,
'php_minor_version' => $phpMinorVersion,
'sf_version' => $sfVersion,
'sf_minor_version' => $sfVersionInfos[0].'.'.$sfVersionInfos[1],
];
return $globals;
}
}
En bonus, le snippet permettant d'utiliser ce code : 🎉<?php
declare(strict_types=1);
namespace App\Controller\Snippet;
use App\Twig\Extension\EnvExtension;
/**
* J'utilise un trait PHP afin d'isoler chaque snippet dans un fichier.
* Ce code doit être apellé d'un contrôleur Symfony étendant AbstractController (depuis Symfony 4.2)
* ou Symfony\Bundle\FrameworkBundle\Controller\Controller (Symfony <= 4.1).
* Les services sont injectés dans le constructeur du contrôleur principal.
*
* @property EnvExtension $envExtension
*/
trait Snippet12Trait
{
public function snippet12(): void
{
print_r($this->envExtension->getGlobals()); // That's it! 😁
}
}
Exécuter le snippet ≪ this.showUnitTest ? this.trans.hide_unit_test : this.trans.show_unit_test ≫ Plus sur Stackoverflow Snippet aléatoire
<?php
declare(strict_types=1);
namespace App\Tests\Integration\Controller\Snippets;
use App\Twig\Extension\EnvExtension;
use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase;
/**
* @see Snippet12Trait
*/
final class Snippet12Test extends KernelTestCase
{
private EnvExtension $envExtension;
protected function setUp(): void
{
$this->envExtension = self::getContainer()->get(EnvExtension::class);
}
/**
* @see Snippet12Trait::snippet12
*/
public function testSnippet12(): void
{
$globals = $this->envExtension->getGlobals();
self::assertArrayHasKey('php_version', $globals);
self::assertArrayHasKey('php_minor_version', $globals);
self::assertArrayHasKey('sf_version', $globals);
self::assertArrayHasKey('sf_minor_version', $globals);
}
}