Une partie qui peut ne pas être très pratique à gérer avec Twig, c'est bien tout ce qui concerne l'envoi des informations. Nous devons en effet envoyer toutes les variables d'un seul coup (header, menu, contenu, ...).
Cela peut facilement devenir un très gros tableau, et pour ne pas rendre le code PHP illisible, je me suis créé une petite class
qui s'occupe de sauvegarder au fur et à mesure mes variables, et de les envoyer à Twig à la fin :
1 //+ Maigret Aurélien 2 //@ https://www.dewep.net 3 class RenderTwig 4 { 5 protected $arguments; 6 protected $template_name; 7 8 public function __construct() 9 { 10 $this->arguments = array(); 11 } 12 13 public function setVar($key, $value) 14 { 15 $this->arguments[$key] = $value; 16 } 17 18 public function getVar($key) 19 { 20 if (isset($this->arguments[$key])) 21 { 22 return ($this->arguments[$key]); 23 } 24 return (false); 25 } 26 27 public function getVars() 28 { 29 return ($this->arguments); 30 } 31 32 public function cleanVars() 33 { 34 $this->arguments = array(); 35 } 36 37 public function setTemplate($template_name) 38 { 39 $this->template_name = $template_name; 40 } 41 42 public function render($force_template_name = false) 43 { 44 if ($force_template_name) 45 $this->template_name = $force_template_name; 46 if (empty($this->template_name)) 47 return (false); 48 49 require_once ('twig/lib/Twig/Autoloader.php'); 50 Twig_Autoloader::register(); 51 52 $loader = new Twig_Loader_Filesystem("templates"); 53 $twig = new Twig_Environment($loader, array( 54 'cache' => false, 55 'autoescape' => true 56 )); 57 58 $template = $twig->loadTemplate($this->template_name); 59 return $template->render($this->arguments); 60 } 61 }
Un petit exemple d'utilisation :
1 $render = new RenderTwig(); 2 3 $render->setVar("titre", "Titre de ma page"); 4 $render->setVar("menu", array("Accueil", "Page 1", "Page 2", "Contact")); 5 $render->setVar("contenu", "Contenu ..."); 6 7 $render->setTemplate("demo.html"); 8 echo $render->render();