Raccourcis : Contenu - rubriques - sous rubriques
EN FR

Oublier les variables $_GET, $_POST...

Dans une action d'un contrôleur, une des tâches que vous ferez le plus souvent, est de récupérer les paramètres de la requête HTTP.

En PHP "classique", on fait appel à $_GET, $_POST, $_REQUEST, $_FILES etc.

À part pour l'upload des fichiers ($_FILES), il ne faut pas utiliser ces variables, mais passer par certaines méthodes du contrôleur.

En effet, un module étant censé être réutilisable, il ne sait donc pas où récupérer les paramètres dont il a besoin. Par exemple, au changement d'une URL, il se peut qu'un paramètre que vous trouviez dans $_GET se trouve maintenant dans le PATHINFO de l'URL, ou que cela soit passé en $_POST etc... Plus important, des plugins de coordinateurs, peuvent rajouter des paramètres ou modifier ceux qui sont reçu (sans modifier les tableaux originaux), comme le fait par exemple le plugin magicquotes (qui annule l'effet magicquotes).

Enfin, suivant les protocoles (SOAP, XMLRPC,..), les paramètres peuvent aussi se trouver dans le corps de la requête HTTP..

C'est pourquoi Jelix propose un moyen, unifié, pour récupérer des paramètres de requêtes : il faut utiliser la méthode param() d'un contrôleur.

Récupérer les paramètres de requête

Comme vous le savez, les paramètres de la requête http sont stockés dans un objet jRequest, qui lui même est stocké dans l'objet jCoordinator. On peut ainsi récupérer un paramètre de cette façon :


  $id = $GLOBALS['gJCoord']->request->getParam('id');

Mais il y a plus pratique : la méthode param() disponible dans les contrôleurs, au résultat équivalent.


  $id = $this->param('id');

Si il n'y a pas de paramètre de nom id, le résultat sera la valeur null. Vous pouvez aussi indiquer en deuxième argument une valeur qui sera prise si le paramètre indiqué n'existe pas.


  $titre = $this->param('title','un titre');

Il y a d'autres méthodes similaires, comme intParam(), floatParam() ou boolParam(), prenant les mêmes arguments, mais transformant le paramètre récupéré dans le type de donnée correspondant. Cela permet ainsi de "filtrer" les données.

  • intParam(), pour récupérer un nombre entier;
  • floatParam(), un décimal.
  • boolParam(), vous obtiendrez true si le paramètre vaut "true", "1", "on", ou "yes", et false dans le cas contraire.

Si vous voulez un filtrage pour d'autres types de données, utilisez la classe jFilter.