Faire du MVC sur un hébergement Free

Oui, je sais, vous commencez à me trouver masochiste… et peut-être que j’aime ça ! ;-)

Je me suis lancé dans l’idée de la réalisation d’un petit site qui répertoriera des fausses petites annonce rigolotes, en parodiant un site un peu plus sérieux (et plus célèbre aussi). Et dans mes choix, pour la première version, j’ai décidé de ne rien débourser, d’avoir un hébergement simple, et une url simple, avec php et MySQL. j’ai donc choisi Free.

Mais voilà. Free.fr, à l’heure ou j’écris ces lignes, en est toujours à une version vieillissante de PHP 5, qui n’est pas suffisante pour la plupart des scripts que j’aurais aimé utiliser pour l’occasion. En effet, dès le début, je m’aperçois que je ne peux pas utiliser PDO (manque le driver MySQL), ni MySQLi, et que les plus élémentaires des moteurs de template (comme Smarty ou Twig) ou de routing (comme Slim ou même YAF) demandent minimum une version 5.2.4. Il va donc me falloir ruser, encore une fois.

Petite précision cependant, une réponse à un de mes posts sur les forums de l’ADUF a reçu une réponse encourageante de la part d’un corp de chez Free : en effet il semblerait que Free proposera bientôt une nouvelle version de PHP. Reste plus qu’à savoir quand !

MVC : Voici donc mes choix :

  • RainTPL (version 2, pas la 3) sera utilisé pour les templates. J’ai été fortement influencé par cet article de IdleBlog.
  • Pour les routes, il va par contre falloir bricoler moi-même… un petit mix entre l’url rewriting avec .htaccess et un index.php devrait faire l’affaire. Evidemment, chez Free, le .htaccess est un peu spécial aussi… mais il sera sans doute trés proche de celui que j’avais créé pour les permaliens de wordpress…
  • Le MySQL simple sera de la partie, et de toutes façons sera suffisant.

RainTPL étant plutôt intuitif et bien introduit par le lien précédent, je ne m’attarderai pas dessus ici. D’autant que sa doc fera ça mieux que moi.

Pour les routes, on commence par rediriger toutes les requêtes non abouties (Erreurs 404) vers l’index.php, dans lequel on travaillera. Voilà le .htaccess correspondant :

<ifDefine Free>
# Force PHP 5
PHP 1
# Hack Url Rewritting Free
ErrorDocument 404 /index.php
</ifDefine>

J’ai ensuite développé ma petite classe, simple, et efficace. On instancie l’objet, et on lui passe en paramètre la route, ainsi que la fonction qu’on voudra qu’il appelle pour l’occasion. C’est cette même classe qui décidera, si la route est bonne, de renvoyer un header HTTP 200 en lieu et place du 404 au navigateur. On restera donc clairement lisible par un moteur de recherche. L’utilisation se veut simple, mais un petit exemple sera sans doute plus clair :

// Création des routes
require_once ‘inc.class.SamRoutes.php’;
$SamRoute = new SamRoutes();

// fonction qui sera appellée pour l’url http://www.siteweb.com/hello/(le contenu de la variable) :
$SamRoute->add(‘hello/:nom’, ‘hello’);
function hello($nom){
echo « hello $nom ! »;
}

// fonction qui sera appellée pour l’url http://www.siteweb.com/hello/(le contenu de la variable)/cava :
$SamRoute->add(‘hello/:nom/cava’, ‘hello2′);
function hello2($nom){
echo « hello $nom ! ça va ? »;
}

Si vous êtes intéressés par la classe elle même, n’hésitez pas à demander !

Maintenant que les outils sont rassemblés, y’a plus qu’à… alors allons-y !

En alliant les 2, on a déjà l’essentiel du moteur MVC. exemple :

require_once ‘inc.class.SamRoutes.php’;
require_once « inc.class.rain.tpl.php »;
raintpl::configure(« tpl_dir », «  » );
raintpl::configure(« cache_dir », « tmp/ » );

$SamRoute = new SamRoutes();
$SamRoute->add(‘hello/:nom’, ‘hello’);

function hello($nom){
$tpl = new RainTPL;
$tpl->assign(« name », $nom);
$tpl->draw(‘inc.tmpl’);
}

Attention ! Ce système montre tout de même une limite : Une requête POST ne sera pas récupérée. Elle sera perdue au moment ou le serveur considèrera l’erreur 404. il va donc falloir envoyer les formulaires sur des pages réelles.

partager sur...Share on FacebookTweet about this on TwitterShare on Google+Share on LinkedIn

So, what do you think ?

  • Current ye@r *