Récupérer le répertoire racine d'un projet Symfony

Publié le 28/10/2018 • Mis à jour le 08/12/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 🇬🇧

On appprend tous les jours ! Tellement vrai, en fait j'ai créé ce snippet car je ne connaissais pas la nouvelle fonction Kernel::getProjectDir() qui a été introduite dans Symfony 3.3. Avant, avec Symfony 3.2, on devait utiliser le répertoire parent du résultat de la fonction getRootDir(). C'est donc plus simple désormais. Je pense que je m'en souviendrai. 😉
[08/12/2018] Ajouté une alternative utilisant le paramètre kernel.project_dir du conteneur.


<?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 Snippet6Trait
{
    public function snippet6(): void
    {
        // 1. Using the Kernel
        //$rootDir = \dirname($kernel->getRootDir()); // <= Symfony 3.2
        $projectDir = $this->kernel->getProjectDir(); // >= Symfony 3.3
        echo 'With the kernel:'.$projectDir.PHP_EOL;

        // 2. Using the kernel.project_dir parameter
        $projectDirAlt = $this->getParameter('kernel.project_dir');
        echo 'With the container parameter:'.$projectDir.PHP_EOL;

        if ($projectDir !== $projectDirAlt) {
            throw new \RuntimeException('Project directory are not the same! 💥');
        }

        // Get the template content of this snippet
        $twig = file_get_contents($projectDir.'/src/Controller/Snippet/Snippet6Trait.php');

        echo($twig); // That's it! 😁
    }
}

 Exécuter le snippet  Plus sur Stackoverflow   Lire la doc