Définir un filtre Twig personnalisé dans Silex

20 novembre 2016

Pour définir un filtre personnalisé pour le moteur de template Twig dans Silex, il suffit de le définir au moment d'enregistrer Twig en tant que service (donc après avoir déclaré le fournisseur).

Par exemple, j'utilise ceci pour formater facilement une date depuis un format SQL (2016/12/31 23:59:59) vers une date française :

Silex 1.3

$app['twig'] = $app->share($app->extend('twig', function(Twig_Environment $twig, $app) {
    $twig->addFilter(new Twig_SimpleFilter('datefr', function ($value) {
      setlocale(LC_TIME, "fr_FR.utf8");
      return strftime("%A, %d %B %Y", strtotime($value));
    }));
    return $twig;
}));

Silex 2.0

$app['twig'] = $app->extend('twig', function(Twig_Environment $twig, $app) {
    $twig->addFilter(new Twig_SimpleFilter('datefr', function ($value) {
    setlocale(LC_TIME, "fr_FR.utf8");
    return strftime("%A, %d %B %Y", strtotime($value));
    }));
    return $twig;
});

Ensuite il suffit, dans le template, de l'appeler comme n'importe quel filtre : {{ maVariableDateTime|datefr }} qui retourne dans notre cas un joli samedi, 31 décembre 2016