Récupérer la liste des blocs d'un template Twig
Publié le 08/08/2020 • Mis à jour le 08/08/2020
Dans ce bout de code, nous allons voir comment récupérer la liste des blocs d'un template Twig. Nous devons passer par le service Twig\Environment
. Désolé, je n'ai pas trouvé de lien dans la documentation mais une PR GitHub ou cette fonction a été modifiée.
<?php
declare(strict_types=1);
// src/Controller/Snippet/Snippet108Trait.php
namespace App\Controller\Snippet;
use Twig\Environment;
/**
* 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 Environment $twigEnvironment
*/
trait Snippet108Trait
{
public function snippet108(): void
{
$blockNames = $this->twigEnvironment->load('layout.html.twig')->getBlockNames();
var_dump($blockNames);
// 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\Controller\Snippets;
use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase;
use Twig\Environment;
/**
* @covers Snippet108Trait
*/
final class Snippet108Test extends KernelTestCase
{
private Environment $twigEnvironment;
protected function setUp(): void
{
self::bootKernel();
$this->twigEnvironment = self::$container->get(Environment::class);
}
/**
* @covers Snippet108Trait::snippet108
*/
public function testSnippet108(): void
{
$blockNames = $this->twigEnvironment->load('layout.html.twig')->getBlockNames();
self::assertCount(14, $blockNames);
}
}