Créer une extension Twig pour FuelPHP

À compter de sa version 1.1, le framework PHP FuelPHP dispose du package Parser, qui lui permet d'utiliser un moteur de templates externe. Compatible avec un certain nombre d'entre eux, il l'est notamment avec celui qui nous intéresse aujourd'hui : Twig, le moteur de templates de Symfony2.

Si l'installation de ce dernier au sein du framework est plutôt évidente, même sans passer par Composer (télécharger Twig, extraire le sous-répertoire lib/Twig de l'archive obtenue, le placer tel quel dans fuel/app/vendor, ajouter si nécessaire Parser à l'autoload, sabrer le champagne), le moyen d'utiliser des extensions de Twig peut le paraître nettement moins, alors qu'il n'en est rien ! Voyez plutôt :

Commençons par écrire notre extension ; voici l'exemple (bidon) que j'ai utilisé pour mes tests :

<?php

class MyExtension extends \Twig_Extension
{
public function getName()
{
return 'my_extension';
}

public function getFilters()
{
return array(
'my_filter' => new \Twig_Filter_Function('my_function')
);
}
}

function my_function($s)
{
$salt = 'FuelPHP rules';
return md5($salt.$s);
}

Par souci de simplicité, j'ai placé ce fichier directement dans fuel/app/classes/myextension.php. Copions ensuite le fichier de configuration fuel/packages/parser/config/parser.php dans fuel/app/config/parser.php, et éditons ce dernier pour y déclarer notre extension :

'View_Twig' => array(
// ...
'extensions' => array(
'Twig_Fuel_Extension',
'MyExtension'
),
),

Et c'est tout ! Vous pouvez désormais utiliser le filtre my_filter directement dans vos templates Twig sous FuelPHP.