SF2: DataTransformer

Nuevo concepto para la saca: DataTransformer.

Hablando "en symfony", se trata de una clase que transforma los datos de un controlador para adaptarlos a un formulario (normalmente), aunque imagino que tendrá más casos de uso.

Supongamos la típica consulta en controlador que devuelve un objeto, un objeto que no es capaz de entender la clase con la que construimos el formulario. Para concretar un poco más, he estado jugando con el FPNTagBundle y se da el caso de que el buildForm() del EntityType con el que estoy trabajando no acepta objetos, sólo strings.

Tengo (al menos) dos opciones, o enguarrar el controlador pasando el objeto adecuadamente a string para que el buildForm() trague, o acepto el objeto en buildForm() y enguarro ahí para convertirlo a cadena. ¿Y si el día de mañana quiero utilizar ese mismo objeto en otras entidades?, ¿reescribir código aunque sea a base de copy&paste?.

Evidentemente existe la tercera opción, la buena, con la que me voy a ganar a Lino: el DataTransformer. Se trata de configurar buildForm() para que llame a un dataTransformer que no está asociado a la entidad que lo llama, de forma que las operaciones de conversión las haremos ahí.

Y si queremos agregar la misma funcionalidad en otras entidades, tan sólo tendremos que decirle al buildForm() de las mismas que tire de ese dataTransformer. ¿Enrevesado?, puede ser, pero muy funcional. Os dejo el enlace a la documentación oficial y un pequeño ejemplo.

About the author

Óscar
has doubledaddy super powers, father of Hugo and Nico, husband of Marta, *nix user, Djangonaut and open source passionate.