Récupérer l'environnement actif d'une application Symfony
Publié le 10/10/2020 • Actualisé le 10/10/2020
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);
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\Integration\Controller\Snippets;
use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase;
/**
* @see Snippet116Trait
*/
final class Snippet116Test extends KernelTestCase
{
protected function setUp(): void
{
self::bootKernel();
}
/**
* @see Snippet116Trait::snippet116
*/
public function testSnippet116(): void
{
self::assertSame(self::$kernel->getEnvironment(), self::getContainer()->getParameter('kernel.environment'));
}
}