Comment utiliser Twig avec le framework Slim

Parce que je dois remettre les mains dans la poche, je fais le tour des micro framework existants. Après un rapide tour d'horizon, il ne doit en rester que deux :

On m'a dit du bien de silex. Du coup, je teste Slim pour voir si c'est pas mal aussi.

Concernant la partie vues, il est possible d'embarquer Twig.

Voici comment configurer votre application pour que ça fonctionne.

Installation de Slim

Il est vivement conseillé de l'installer via le composer. La doc est bien renseignée : http://docs.slimframework.com/#Installation.

Mais nous allons faire quelques modifications. Puisque nous allons utiliser Slim-Views pour utiliser Twig, vous pouvez donc renseigner votre composer.json comme ça :

{
    "require": {
        "slim/slim": "2.*",
        "slim/views": "0.1.*"
    }
}

Vous avez donc cette arborescence :

  • \\vendor
  • \\vendor\\composer
  • \\vendor\\slim
  • \\vendor\\slim\\slim...
  • \\vendor\\slim\\views...
  • \\vendor\\autoload.php
  • \\composer.json
  • \\composer.lock
  • \\composer.phar

Vous devez créer un fichier index.php :

<?php
require 'vendor/autoload.php';

$app = new \\Slim\\Slim(array(
    'view' => new \\Slim\\Views\\Twig()
    ));

$app->get('/', function () use ($app) {
    $app->render('home.html');
});

$app->run();

Pensez donc à créer un fichier home.html dans un répertoire templates1 à la racine de votre projet.

Si vous exécutez votre code à ce moment donné, voici le genre d'erreur que vous rencontrerez :

[error] [client 127.0.0.1] PHP Warning:  Uncaught exception 'ErrorException' with message 'require_once(/Autoloader.php): failed to open stream: No such file or directory' in /home/nico/Dev/slim/vendor/slim/views/Slim/Views/Twig.php:114\\nStack trace:\\n#0 /home/nico/Dev/slim/vendor/slim/views/Slim/Views/Twig.php(114): Slim\\\\Slim::handleErrors(2, 'require_once(/A...', '/home/nico/Dev...', 114, Array)\\n#1 /home/nico/Dev/slim/vendor/slim/views/Slim/Views/Twig.php(114): Slim\\\\Views\\\\Twig::getInstance()\\n#2 /home/nico/Dev/slim/vendor/slim/views/Slim/Views/Twig.php(85): Slim\\\\Views\\\\Twig->getInstance()\\n#3 /home/nico/Dev/slim/vendor/slim/slim/Slim/View.php(252): Slim\\\\Views\\\\Twig->render('home.html')\\\\n#4 /home/nico/Dev/slim/vendor/slim/slim/Slim/View.php(242): Slim\\\\View->fetch('home.html')\\n#5 /home/nico/Dev/slim/vendor/slim/slim/Slim/Slim.php(742): Slim\\\\View->display('home.html')\\n#6 /home/nico/Dev/slim/index.php(11): Slim\\\\Slim->render('home.html')\\n#7 [internal function]: {closure}()\\n#8 /home/nico/Dev/slim/vendor/slim/slim/Slim/Route.php(436): call_user_func_a in /home/nico/Dev/slim/vendor/slim/views/Slim/Views/Twig.php on line 114
[error] [client 127.0.0.1] PHP Fatal error:  Slim\\\\Views\\\\Twig::getInstance(): Failed opening required '/Autoloader.php' (include_path='.:/usr/share/php:/usr/share/pear') in /home/nico/Dev/slim/vendor/slim/views/Slim/Views/Twig.php on line 114

Deux choses :

  1. il faut installer Twig en fait. Slim-Views ne s'en charge pas
  2. il faut paramétrer Slim-Views pour lui indiquer le chemin de votre installation de Twig

Installation de Twig

Téléchargez-le et copiez / collez le répertoire Twig (présent dans lib/) à la racine de votre application.

Paramétrage de Slim-Views

Avant d'exécuter votre application, ajoutez ces deux lignes :

$view = $app->view();
$view->parserDirectory = 'Twig';

Voila, ça devrait maintenant fonctionner. Bon amusement !


  1. si vous souhaitez un autre répertoire, ça se change assez facilement 

Vus : 2730
Publié par Nicolas Lœuillet : 125