Osumi Framework

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();
		}
	}