Transformers

Nota

El módulo Transformers utiliza la clase estática TransformersManager para gestionar las transformaciones de datos.

Los transformers se utilizan para transformar los datos después de cargarlos desde la base de datos o antes de mostrarlos en una vista.

Añadir transformers

O bien la clase Author que queremos utilizar en nuestra aplicación :

app/models/Author.php
 1namespace models;
 2
 3use Ubiquity\attributes\items\Transformer;
 4
 5class Author {
 6
 7   #[Transformer('upper')]
 8   private $name;
 9
10   public function getName(){
11      return $this->name;
12   }
13
14   public function setName($name){
15      $this->name=$name;
16   }
17}

Añadimos un transformer en el miembro name con la anotación @transformer, para poner el nombre en mayúsculas en las vistas.

Generar caché

Ejecute este comando en modo consola para crear los datos de caché de la clase Author :

Ubiquity init-cache -t=models

La caché del transformer se genera con metadatos del modelo en app/cache/models/Author.cache.php.

La información de los transformers puede visualizarse con devtools :

Ubiquity info:model -m=Author -f=#transformers
../_images/trans-info.png

Uso de transformers

Inicie el TransformersManager en el archivo app/config/services.php:

app/config/services.php
\Ubiquity\contents\transformation\TransformersManager::startProd();

Puede comprobar el resultado en la interfaz de administración:

../_images/trans-upper.png

o creando un controlador:

app/controllers/Authors.php
 1namespace controllers;
 2
 3class Authors {
 4
 5   public function index(){
 6      DAO::transformersOp='toView';
 7      $authors=DAO::getAll(Author::class);
 8      $this->loadDefaultView(['authors'=>$authors]);
 9   }
10
11}
app/views/Authors/index.html
<ul>
   {% for author in authors %}
      <li>{{ author.name }}</li>
   {% endfor %}
</ul>

Tipos de transformers

transform

El tipo transform se basa en la interfaz TransformerInterface. Se utiliza cuando los datos transformados deben convertirse en un objeto. |brl El transformador DateTime es un buen ejemplo de este tipo de transformador:

  • Al cargar los datos, el Transformador convierte la fecha de la base de datos en una instancia de php DateTime.

  • Su método reverse realiza la operación inversa (fecha php a fecha compatible con la base de datos).

toView

El tipo toView se basa en la interfaz TransformerViewInterface. Se utiliza cuando los datos transformados deben mostrarse en una vista.

toForm

El tipo toForm se basa en la interfaz TransformerFormInterface. Se utiliza cuando los datos transformados deben utilizarse en un formulario.

Uso de transformers

Transformación en la carga de datos

Si se omite, transformerOp por defecto es transform.

$authors=DAO::getAll(Author::class);

Establecer transformerOp a toView

DAO::transformersOp='toView';
$authors=DAO::getAll(Author::class);

Transformación tras la carga

Devuelve el valor transformado del miembro:

TransformersManager::transform($author, 'name','toView');

Devuelve un valor transformado:

TransformersManager::applyTransformer($author, 'name','john doe','toView');

Transforma una instancia aplicando todos los transformers definidos:

TransformersManager::transformInstance($author,'toView');

Transformers existentes

Transformer

Tipo(s)

Descripción

datetime

transform, toView, toForm

Transformar una fecha y hora de una base de datos en un objeto DateTime de php

upper

toView

Poner el valor en mayúsculas

lower

toView

Poner el valor en minúsculas

firstUpper

toView

Poner en mayúsculas el primer carácter del valor

password

toView

Enmascarar los caracteres

md5

toView

Hashear el valor con md5

Cree personalizado

Creación

Crear un transformador para mostrar un nombre de usuario como una dirección de correo electrónico local:

app/transformers/toLocalEmail.php
 1namespace transformers;
 2use Ubiquity\contents\transformation\TransformerViewInterface;
 3
 4class ToLocalEmail implements TransformerViewInterface{
 5
 6   public static function toView($value) {
 7      if($value!=null) {
 8         return sprintf('%s@mydomain.local',strtolower($value));
 9      }
10   }
11
12}

Registro

Registre el transformador ejecutando el siguiente script:

TransformersManager::registerClassAndSave('localEmail',\transformers\ToLocalEmail::class);

Uso

app/models/User.php
 1namespace models;
 2
 3use Ubiquity\attributes\items\Transformer;
 4
 5class User {
 6
 7   #[Transformer('localEmail')]
 8   private $name;
 9
10   public function getName(){
11      return $this->name;
12   }
13
14   public function setName($name){
15      $this->name=$name;
16   }
17}
DAO::transformersOp='toView';
$user=DAO::getOne(User::class,"name='Smith'");
echo $user->getName();

El nombre de usuario Smith aparecerá como smith@mydomain.local.