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

Publié le 08/08/2020 • Actualisé 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);

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

  Travaillez avec moi !

<?php

declare(strict_types=1);

namespace App\Tests\Integration\Controller\Snippets;

use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase;
use Twig\Environment;

/**
 * @see Snippet108Trait
 */
final class Snippet108Test extends KernelTestCase
{
    private Environment $twigEnvironment;

    protected function setUp(): void
    {
        $this->twigEnvironment = self::getContainer()->get(Environment::class);
    }

    /**
     * @see Snippet108Trait::snippet108
     */
    public function testSnippet108(): void
    {
        $blockNames = $this->twigEnvironment->load('layout.html.twig')->getBlockNames();
        self::assertCount(14, $blockNames);
    }

    /**
     * Fake test to test tearDown() and tearDownAfterClass().
     */
    public function testSnippet108Part2(): void
    {
        $blockNames = $this->twigEnvironment->load('layout.html.twig')->getBlockNames();
        self::assertCount(14, $blockNames);
    }

    /**
     * Executed after each test. It is protected and NOT static.
     *
     * @see certif/Tests/20210601.txt
     */
    protected function tearDown(): void
    {
        // echo 'tearDown'."\n";
    }

    /**
     * Executed after the last test. It is public AND static.
     */
    public static function tearDownAfterClass(): void
    {
        // echo 'tearDown after class'."\n";
    }
}