Récupérer l'environnement actif d'une application Symfony

Publié le 10/10/2020 • Mis à jour le 10/10/2020


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

Dans ce bout de code nous allons voir comment récupérer l'environnement actif d'une application Symfony. Il y a deux manières de procéder : soit en utilisant le noyau, soit en récupérant le paramètre kernel.environment du conteneur de services. Les deux méthodes doivent donc retourner la même valeur. Veuillez noter que quand on utilise le composant dotenv, on peut aussi accéder à la superglobale $_ENV['APP_ENV'], mais ce n'est bien sûr pas une bonne pratique.


<?php declare(strict_types=1);

// src/Controller/Snippet/Snippet116Trait.php

namespace App\Controller\Snippet;

use Symfony\Component\HttpKernel\KernelInterface;

/**
 * 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 KernelInterface $kernel
 */
trait Snippet116Trait
{
    public function snippet116(): void
    {
        $fromKernel = $this->kernel->getEnvironment();
        $fromParameters = $this->getParameter('kernel.environment');

        if ($fromKernel !== $fromParameters) {
            throw new \RuntimeException("Houston, We Have a Problem. 💥");
        }

        echo sprintf('The current active application environment is "%s".', $fromKernel); // That's it! 😁
    }
}

 Exécuter le snippet  ≪ this.showUnitTest ? this.trans.hide_unit_test : this.trans.show_unit_test ≫  Plus sur Stackoverflow   Lire la doc   Lire la doc

<?php declare(strict_types=1);

namespace App\Tests\Controller\Snippets;

use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase;

/**
 * @covers Snippet116Trait
 */
final class Snippet116Test extends KernelTestCase
{
    protected function setUp(): void
    {
        self::bootKernel();
    }

    /**
     * @covers Snippet116Trait::snippet116
     */
    public function testSnippet116(): void
    {
        self::assertSame(self::$kernel->getEnvironment(), self::$kernel->getContainer()->getParameter('kernel.environment'));
    }
}