Programador PHP freelance

Capturar error en la validación de HTML_QuickForm

Suelo utilizar HTML_QuickForm de PEAR para generar los formularios de mis aplicaciones web y lo suelo combinar con Smarty como sistema de plantillas.

El HTML_QuickForm realiza una validación a nivel de servidor volcando mensajes predefinidos por el programador en caso de que alguno de los campos no se valide correctamente, por ejemplo se introduce una cadena de texto en un campo

numérico.

La librería es genial, da mucha flexibilidad y sobretodo simplifica y ordena la validación de los formularios haciendo bastante legible el código.

Se me ha planteado el caso donde el formulario es tan grande que se sale de la pantalla y cuando se produce un error en la validación puede que el campo que lo ha producido se encuentre fuera del alcance de la primera página con lo cual el usuario desconoce que se ha producido el error y puede dar por buena la operación. Para estos casos se necesita poder capturar el hecho de que se halla producido un error en la validación cosa que HTML_QuickForm no dice por si solo. Es decir no existe ningún método, por lo que he visto, que te devuelva si se ha producido algún error.

Lo que sí que existe son alternativas a este método. Describo las dos

A nivel de código PHP:

El método isSubmitted() del HTML_QuickForm nos dice si el formulario ha sido enviado. En este caso si hacemos esta comprobación después de hacer la validación mediante validate() podemos asegurar que se ha producido un error ya que en caso contrario el formulario habría sido tratado por el método asociado en process().

Pego un poco de código para que se vea claro:

if ($form->validate()) {

$form->process('submitFormEdit');

} else {

if ($form->isSubmitted()){
$msg = 'Se ha producido un error en algún campo';
}else
$form->display()

}

A nivel de Smarty:

En este caso capturamos la variable error que se pasa al Smarty dentro del objeto formulario.

Pongamos por caso que el formulario le llega a Smarty dentro de la variable $form, entonces podemos hacer algo tal que así.

{if $form_data.errors}Se ha producido un error en algún campo{/if}