Récupérer les versions de Symfony et PHP de l'environnement courant

Publié le 15/01/2019 • Actualisé le 15/01/2019


English language detected! 🇬🇧

  We noticed that your browser is using English. Do you want to read this post in this language?

Read the english version 🇬🇧 Close

Il est parfois utile d'avoir ces informations. 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 aussi d'être à jour automatiquement en cas de mise à jour 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

  Travaillez avec moi !

<?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);
    }
}