Pre validators en symfony

symfony.jpg
Solucionex
09
Dic 10

En mi anterior entrada, os conté como funcionan los post validators en Symfony. En esta ocasión os voy a contar como funcionan los pre validators. Un pre validator en un validador que se ejecuta justo antes de que Symfony lance los validadores individuales de todos los campos del formulario y los post validatos que os comenté en el anterior post.

Vamos a ver un sencillo ejemplo se uso de un pre validator. Supongamos el siguiente esquema:

producto:    nombre:      type: varchar(255)      required: true    marca:      type: varchar(255)      required: true    modelo:      type: varchar(255)      required: false    en_venta:  type: boolean    precio:      type: float      required: false

En el método configure de la clase del formulario, incluimos el siguiente código:

public function configure() {   $this->validatorSchema->setPreValidator(new sfValidatorCallback(array("callback" => array($this, "preValidate")))); }

Utilizamos un sfValidatorCallback como pre validator, el cual se ejecuta antes que los demás validadores. La función preValidate, lo que hace es preguntar si “en_venta” existe en el array $values, si es así, es porque el campo “en_venta” esta a true. Si “en_venta” esta true, se establece el campo “precio” como obligatorio.

public function preValidate($validator, $values) {   if (isset($values["en_venta"]))   {     $this->getValidator("precio")->setOption("required", true);   }  }

Una vez ejecutado el pre validator, con el resultado, se ejecutan los validadores de los campos de forma normal.

Como podéis comprobar el uso de los pre validators son iguales que los post validador con la particularidad que en los pre validators podemos alterar las propiedades de los campos del formulario, modificando el comportamiento de los sucesivas validaciones.