Récupérer la liste des blocs d'un template Twig

Publié le 08/08/2020 • Mis à jour le 08/08/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 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 ≫   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);
    }
}