Tester le type d'une variable dans un template Twig

Publié le 15/06/2020 • Mis à jour le 15/06/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 Tester le type d'une variable dans un template Twig. Pour ce faire nous allons créer une petite extension. Dans la démo suivante, tout d'abord je déclare les variables qui vont être utilisées. Elles sont déclarées en PHP pour être sûr du type créé. Ensuite, j'affiche la matrice de test ou chaque variable est testée avec chaque type. Pour afficher le résultat du test, j'utilise une expression ternaire :
{{ varNumeric is of_type('int') ? '✅' : '❌' }}


Démo HTML du snippet

Variables

     */
    public function data58(array $data): array
    {
        return $this->activateAnsi($data);
    }

    /**
     * @see templates/snippet/code/_72_demo.html.twig
     *
     * @param array<string,mixed> $data
     *
     * @return array<string,mixed>
     */
    public function data72(array $data): array
    {
        $data['form'] = $this->formFactory->create(CustomRenderingType::class)->createView();

        return $data;
    }
⬇var is of_type('type') ➡ array bool object class float int numeric scalar string
varArray
varBool
varObject
varClass (App\Data\SnippetData)
varFloat
varInt
varNumeric
varScalar
varString

<?php declare(strict_types=1);

// src/Twig/Extension/TypeExtension.php

namespace App\Twig\Extension;

use Twig\Extension\AbstractExtension;
use Twig\TwigTest;

final class TypeExtension extends AbstractExtension
{
    public function getTests(): array
    {
        return array('of_type' => new TwigTest('of_type', [$this, 'ofType']));
    }

    /**
     * @param mixed $var
     */
    public function ofType($var, string $test, string $class = null): bool
    {
        switch ($test) {
            case 'array':
                return is_array($var);

            case 'bool':
                return is_bool($var);

            case 'object':
                return is_object($var);

            case 'class':
                return is_object($var) === true && $class === get_class($var);

            case 'float':
                return is_float($var);

            case 'int':
                return is_int($var);

            case 'numeric':
                return is_numeric($var);

            case 'scalar':
                return is_scalar($var);

            case 'string':
                return is_string($var);

            default:
                throw new \InvalidArgumentException(sprintf('Invalid "%s" type test.', $test));
        }
    }
}

 Plus sur Stackoverflow  Plus sur le web  Snippet aléatoire