HTTPRequest, Gestion des requêtes en PHP
Une classe PHP5 pour gérer les requêtes passées à notre application
Une classe outil qui peut être réutilisée et complétée pour gérer les requêtes POST et GET passées à votre application.
Fonctionnement de la classe HttpRequest
La classe est assez simple et plutÃŽt utile, elle est complÚtement réutilisable (cela me fait penser que PHP6 et l’arrivée des espaces de nom (namespaces) sera une trÚs bonne nouvelle pour la communauté PHP. Car le manque de cette fonctionnalité commence réellement à se faire sentir avec les multiples classes et frameworks qui voient le jour !), utilisée via un frontController elle permet d’intercepter les requêtes passées à l’application sous toutes ses couches et les nettoie en fonction du type à retourner.
Exemple d’utilisation
-
<?php
-
$request = new HttpRequest;
-
-
# RécupÚre la valeur d’un "module" alphabétique
-
$module = $request->getAlpha (‘module’);
-
-
# RécupÚre les valeurs d’un formulaire
-
$nom = $request->getAlpha (‘nom’); // alphabétique
-
$mdp = $request->getAlnum (‘mdp’); // alphanumérique
-
$mnt = $request->getFloat (‘mnt’); // flottantes (ex : un montant)
-
-
$usr_id = $request->getInt (‘usr_id’); // entier
-
-
# RécupÚre les valeurs, sans les échapper (__get)
-
$mix = $request->mixedParam ();
-
// HttpResquest, Gestion des requêtes en PHP
-
# Ajoute un nouveau paramÚtre (__set)
-
$request->newParam = “Hello World”;
-
?>
A voir…
Au niveau du constructeur de la classe, j’utilise un array_merge pour récupérer les tableaux GET et POST, mais peut être que placer un paramÚtre au constructeur permettrait une meilleure souplesse de la classe.
-
<?php
-
class HttpRequest_2 {
-
private $_request;
-
-
public function __construct ($array) {
-
$this->_request = $array;
-
}
-
// …
-
}
Ainsi on peut choisir quels sont les types de variable qu’on souhaite récupérer…
-
<?php
-
# POST
-
$request = new HttpRequest ($_POST);
-
-
# GET
-
$request = new HttpRequest ($_GET);
-
-
# POST et GET
-
-
# POST, GET, COOKIE
-
$request = new HttpRequest ($_REQUEST);
-
-
# ou toute autre variante …
-
?>
La classe HttpRequest complete
-
<?php
-
-
/**
-
* Ferdjaoui Sahid <sahid@funraill.org>
-
* http://sahid.funraill.org
-
*
-
* @copyright Copyright (c) 2007 Ferdjaoui Sahid
-
*/
-
-
/**
-
* HttpRequest, Gestion des requêtes passées à l’application
-
*
-
* @category HTTP
-
* @package HttpRequest
-
*/
-
class HttpRequest
-
{
-
private $_request;
-
-
/**
-
*/
-
public function __construct ()
-
{
-
}
-
-
/**
-
* Retourne la valeur d’un paramÚtre passé à l’appli
-
*
-
* @param mixed $key
-
* @return mixed
-
*/
-
public function get ($key)
-
{
-
? $this->_request[$key] : false;
-
}
-
-
/**
-
* Ajoute un nouveau paramÚtre
-
*
-
* @param mixed $key
-
* @param mixed $val
-
*/
-
public function set ($key, $val)
-
{
-
$this->_request[$key] = $val;
-
}
-
-
/**
-
* Mapping des méthodes get et set via l’utilisation de __get et __set
-
*/
-
public function __get ($key) { return $this->get ($key); }
-
public function __set ($key, $val) { $this->set ($key, $val); }
-
-
/**
-
* Retourne une chaîne de caractÚres alphabétiques
-
*
-
* @param mixed $key
-
* @return string
-
*/
-
public function getAlpha ($key)
-
{
-
}
-
-
/**
-
* Retourne une chaîne de caractÚres alphanumériques
-
*
-
* @param mixed $key
-
* @return string
-
*/
-
public function getAlnum ($key)
-
{
-
}
-
-
/**
-
* Retourne et convertit une chaîne en nombre à virgule flottante
-
*
-
* @param mixed $key
-
* @return integer
-
*/
-
public function getInt ($key)
-
{
-
}
-
-
/**
-
* Retourne une valeur à virgule flottante
-
*
-
* @param mixed $key
-
* @return float
-
*/
-
public function getFloat ($key)
-
{
-
}
-
-
/**
-
* Retourne le nom du dossier qui contient le fichier ou dossier
-
*
-
* @param mixed $key
-
* @return mixed
-
*/
-
public function getDir ($key)
-
{
-
}
-
-
/**
-
* Retourne le chemin canonique absolu
-
*
-
* @param mixed $key
-
* @return mixed
-
*/
-
public function getPath ($key)
-
{
-
}
-
-
/**
-
* Retourne le tableur Requête
-
*/
-
public function getRequest () { return $this->_request; }
-
}
Tableau de bord




19 septembre 2007 at 9:28
J’utilise la classe Http trouvée sur http://www.troywolf.com/articles (AJAX Cross-Domain Solution: proxy.php) dans le cadre de mes applications 2.0.
Elle me permet entre autre de rebalancer les headers http (dont les variables passées en POST) à destination de la cible.
Un proxy php est nécessaire pour faire du cross-domain.
J’ai d’ailleurs eu la surprise de constater que http://www.domain.com et http://www.domain.com:1234 sont considérés comme des domaines différents et bloque la méthode open juste à cause du port !
22 septembre 2007 at 19:09
Merci pour la classe Arnaud
30 janvier 2008 at 11:10
je ne comprends pas l’intéret de ta classe?
utilise plutot HttpRequest de Php non?
Yoong
30 janvier 2008 at 12:49
Salut Yoong,
Merci pour ton commentaires,
le but de cette classe est d’être placer dans ton Front Controller afin d’intercepter les entrées et de les filtrer.
En faite elle n’a pas grand chose à voir avec la classe HttpRequest de PHP. disons qu’elle est d’un plus haut niveau car elle filtre les informations, HttpRequest de PHP fournie des méthodes permetant de travailler directement avec le protocole HTTP.
~~
30 janvier 2008 at 14:54
Ha ok,
mais il n’y a pas confusion quand tu instancies un objet httpRequest avec celui de php?
question intéressante : quel est l’ordre de recherche d’une classe pour le charger?celui de php par défaut ou le tien?
Personnellement, j’utilise le zend framework qui fait tout cela.
Yoong
30 janvier 2008 at 16:19
Si bien sur, il y a un conflit et les classes natives de PHP prenne le pas, seulement la mienne est HttpRequest et non HTTPRequest :)
Ce genre de problème devrait bientôt se régler avec l’arrivée des espaces de noms.
j’en parle tres brièvement sur un topic, mais le mieux et de regarder sur la doc php
http://sahid.funraill.org/2007/11/27/support-des-espaces-de-noms-en-php/
~sahid/