DTO
Los DTO, o Data Transfer Object
, son clases que permiten definir los valores específicos que se pasan a una URL. Por ejemplo, una URL a la que se llame como resultado de enviar un formulario, recibirá unos parámetros concretos (los enviados por el formulario) de modo que se puede usar un DTO en lugar de usar la clase genérica ORequest
.
Estas clases se guardan en la carpeta app/dto
y tienen que implementar la interfaz ODTO
, que obliga a implementar los métodos isValid
y load
.
isValid
Este método devuelve un valor booleano como resultado de validar los datos recibidos, por ejemplo campos que no estén vacíos, campos numéricos que no contengan texto...
load
Este método recibe un parámetro de tipo ORequest
genérico con el que cargar los valores necesarios.
Ejemplo
class UserDTO implements ODTO{
private int $id_user = -1;
public function getIdUser(): int {
return $this->id_user;
}
private function setIdUser(int $id_user): void {
$this->id_user = $id_user;
}
public function isValid(): bool {
return ($this->getIdUser() != -1);
}
public function load(ORequest $req): void {
$id_user = $req->getParamInt('id');
if (!is_null($id_user)) {
$this->setIdUser($id_user);
}
}
}
En este ejemplo se define un DTO para un valor id_user
. El método load
obtiene el valor numérico del parámetro id
pasado a la URL y si no es nulo lo guarda.
A continuación, el método isValid
comprueba que el valor id_user
sea distinto de -1, en cuyo caso fallaría la validación.
Usando el DTO en un modulo
#[ORoute('/getUser/:id')]
public function getUser(UserDTO $data): void {
$status = 'ok';
if (!$data->isValid()) {
$status = 'error';
}
if ($status == 'ok') {
$id_user = $data->getIdUser();
}
}