Peticiones (Request)

Nota

Para todas las funciones Http, Ubiquity utiliza clases técnicas que contienen métodos estáticos. Se trata de una elección de diseño para evitar la inyección de dependencias que degradaría el rendimiento.

La clase URequest proporciona funcionalidad adicional para manipular más fácilmente las matrices nativas $_POST y $_GET de php.

Recuperación de datos

Del método get

El método get devuelve el valor null si la clave name no existe en las variables get.

use Ubiquity\utils\http\URequest;

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

El método get puede ser llamado con el segundo parámetro opcional devolviendo un valor si la clave no existe en las variables get.

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

Del método post

El método post devuelve el valor null si la clave nombre no existe en las variables post.

use Ubiquity\utils\http\URequest;

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

El método post puede ser llamado con el segundo parámetro opcional devolviendo un valor si la clave no existe en las variables post.

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

El método getPost aplica un callback a los elementos del array $_POST y los devuelve (callback por defecto : htmlEntities) :

$protectedValues=URequest::getPost();

Recuperación y asignación de datos múltiples

Es habitual asignar los valores de un array asociativo a los miembros de un objeto. |br|Este es el caso, por ejemplo, de la validación de un formulario de modificación de objetos.

El método setValuesToObject realiza esta operación :

Consideremos una clase 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;
     }
}

Consideremos un formulario para modificar un usuario:

<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>

La acción update del controlador Users debe actualizar la instancia de usuario a partir de valores POST.
Utilizando el método setPostValuesToObject se evita la asignación de variables posteadas una a una a los miembros del objeto.
También es posible utilizar setGetValuesToObject para el método get, o setValuesToObject para asignar los valores de cualquier array asociativo a un objeto.

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 }

Nota

Los métodos SetValuesToObject utilizan setters para modificar los miembros de un objeto. Por lo tanto, la clase en cuestión debe implementar setters para todos los miembros modificables.

Probar la solicitud

isPost

El método isPost devuelve true si la petición fue enviada a través del método POST: |br|En el caso de abajo, el método initialize sólo carga la vista vHeader.html si la petición no es una petición 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

El método isAjax devuelve true si la consulta es una consulta Ajax:

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

isCrossSite

El método isCrossSite verifica que la consulta no es cross-site.