Requête

Note

Pour toutes les fonctionnalités Http, Ubiquity utilise des classes techniques contenant des méthodes statiques. C’est un choix de conception pour éviter l’injection de dépendances qui dégraderait les performances.

La classe URequest offre des fonctionnalités supplémentaires permettant de manipuler plus facilement les tableaux php natifs $_POST et $_GET.

Récupération de données

A partir de la méthode get

La méthode get renvoie la valeur null si la clé name n’existe pas dans les variables get.

use Ubiquity\utils\http\URequest;

$name=URequest::get("name");

La méthode get peut être appelée avec le second paramètre facultatif qui renvoie une valeur si la clé n’existe pas dans les variables get.

$name=URequest::get("name",1);

A partir de la méthode post

La méthode post renvoie la valeur null si la clé name n’existe pas dans les variables post.

use Ubiquity\utils\http\URequest;

$name=URequest::post("name");

La méthode post peut être appelée avec le second paramètre facultatif qui renvoie une valeur si la clé n’existe pas dans les variables post.

$name=URequest::post("name",1);

La méthode getPost applique un callback aux éléments du tableau $_POST et les retourne (callback par défaut : htmlEntities) :

$protectedValues=URequest::getPost();

Récupération et affectation de données multiples

Il est courant d’affecter les valeurs d’un tableau associatif aux membres d’un objet.
C’est le cas par exemple lors de la validation d’un formulaire de modification d’objet.

La méthode setValuesToObject effectue cette opération :

Considérons une classe User :

class User {
     private $id;
     private $firstname;
     private $lastname;

     public function setId($id){
             $this->id=$id;
     }
     public function getId(){
             return $this->id;
     }

     public function setFirstname($firstname){
             $this->firstname=$firstname;
     }
     public function getFirstname(){
             return $this->firstname;
     }

     public function setLastname($lastname){
             $this->lastname=$lastname;
     }
     public function getLastname(){
             return $this->lastname;
     }
}

Considérons un formulaire pour modifier un utilisateur :

<form method="post" action="Users/update">
 <input type="hidden" name="id" value="{{user.id}}">
     <label for="firstname">Firstname:</label>
     <input type="text" id="firstname" name="firstname" value="{{user.firstname}}">
     <label for="lastname">Lastname:</label>
     <input type="text" id="lastname" name="lastname" value="{{user.lastname}}">
     <input type="submit" value="validate modifications">
</form>

L’action update du contrôleur Users doit mettre à jour l’instance utilisateur à partir des valeurs POST.
L’utilisation de la méthode setPostValuesToObject permet d’éviter l’affectation des variables postées une à une aux membres de l’objet.
Il est également possible d’utiliser la méthode setGetValuesToObject pour la méthode get, ou setValuesToObject pour affecter les valeurs de tout tableau associatif à un objet.

app/controllers/Users.php
 1 namespace controllers;
 2
 3 use Ubiquity\orm\DAO;
 4 use Uniquity\utils\http\URequest;
 5
 6 class Users extends BaseController{
 7     ...
 8     public function update(){
 9             $user=DAO::getOne("models\User",URequest::post("id"));
10             URequest::setPostValuesToObject($user);
11             DAO::update($user);
12     }
13 }

Note

Les méthodes SetValuesToObject utilisent des setters pour modifier les membres d’un objet. La classe concernée doit donc implémenter des setters pour tous les membres modifiables.

Test de la requête

isPost

La méthode isPost renvoie true si la requête a été soumise via la méthode POST :
Dans le cas ci-dessous, la méthode initialize ne charge la vue vHeader.html que si la requête n’est pas une requête Ajax.

app/controllers/Users.php
 1 namespace controllers;
 2
 3 use Ubiquity\orm\DAO;
 4 use Ubiquity\utils\http\URequest;
 5
 6 class Users extends BaseController{
 7     ...
 8     public function update(){
 9             if(URequest::isPost()){
10                     $user=DAO::getOne("models\User",URequest::post("id"));
11                     URequest::setPostValuesToObject($user);
12                     DAO::update($user);
13             }
14     }
15 }

isAjax

La méthode isAjax renvoie true si la requête est une requête Ajax :

app/controllers/Users.php
1 ...
2     public function initialize(){
3             if(!URequest::isAjax()){
4                     $this->loadView("main/vHeader.html");
5             }
6     }
7     ...

isCrossSite

La méthode isCrossSite vérifie que la requête n’est pas cross-site.