Récupérer le répertoire racine d'un projet Symfony
Publié le 28/10/2018 • Actualisé le 08/12/2019
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 (typehint with "KernelInterface")
// $projectDir = \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 directories 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 ≪ this.showUnitTest ? this.trans.hide_unit_test : this.trans.show_unit_test ≫ Plus sur Stackoverflow Lire la doc Snippet aléatoire
<?php
declare(strict_types=1);
namespace App\Tests\Integration\Controller\Snippets;
use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase;
/**
* @see Snippet6Trait
*/
final class Snippet6Test extends KernelTestCase
{
private string $projectDir;
protected function setUp(): void
{
$this->projectDir = self::getContainer()->getParameter('kernel.project_dir');
}
/**
* @see Snippet6Trait::snippet6
*/
public function testSnippet6(): void
{
self::assertSame(self::$kernel->getProjectDir(), $this->projectDir);
}
}
A vous de jouer !
Ces articles vous ont été utiles ? Vous pouvez m'aider à votre tour de plusieurs manières : (cliquez sur le lien "reply" dans à droite pour me contacter )
- Me remonter des erreurs ou typos.
- Me remonter des choses qui pourraient être améliorées.
- Aimez et repostez !
- Suivez moi sur Bluesky 🦋
- Inscrivez-vous au flux RSS.
- Cliquez sur les boutons Plus sur Stackoverflow pour me faire gagner des badges "annonceur" 🏅.
Merci et à très bientôt sur Strangebuzz ! 😉