Ver Mensaje Individual
  #12  
Antiguo 20-01-2010
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.110
Reputación: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Gracias por tus comentarios e inmerecidos aplausos Julián. Fíjate que sin haberla puesto aún en "producción", creo que esta clase, en efecto, terminaré usándola en algún que otro proyecto. Está quedando incluso mejor de lo que yo creía, y, hasta cierto punto, esto me asusta un poco, porque vaya que aparezca algo que lo jorobe...

Sin embargo, tal como está ahora mismo (he trabajado en ella desde que publiqué mi primer mensaje aquí) la clase permite hacer una serie de cosas que voy a ver si resumo para que queden lo más claras posibles. Estas son las características conque ya puede contarse, tal vez las únicas, puesto que no quiero llenarla de cosas, sino en todo caso dejar que la clase sea "extensible". A ver:

1º La clase HtmlForm permite ahora mismo definir un formulario HTML con todos sus elementos. Estos elementos pueden ser todos los estándar, tanto de HTML 4 como de HTML 5, pudiéndose imprimir HTML o XHTML, aunque esto último es realmente sencillo: pero hay que hacerlo y puede hacerse.

2º La definición del formulario es un Array asociativo que contiene las propiedades del formulario (atributos: action, legend, method, etc.) y que también contiene los propios elementos del formulario, todos ellos identificados por su nombre.

3º En aras de evitar posibles restricciones cada elemento puede imprimir código "antes" y "después" que a sí mismo, además de contar con propiedades que no se corresponden con atributos de los elementos, pero, son "propiedades" que se utilizarán por la clase HtmlForm, por ejemplo y como he dicho ya: before, after, wrap y creo que alguna más...

4º No existen otros elementos que sean los estándar. La clase HtmlForm produce HTML puro y duro, estándar, que podrá en cualquier caso ser extendido mediante Javascript y al que se podrá aplicar el estilo CSS que se precise. Hay que tener en cuenta que los elementos estándar soportados son todos ellos: textarea, select (con opciones, claro), text, hidden, button, email, tel, date, datetime, etc. Todos los elementos se definen exactamente de la misma "intuitiva" forma.

5º La clase HtmlForm (esto es nuevo) trabaja junto con la extensión Filter de PHP. Esto quiere decir que es posible filtrar y validar los valores enviados en un formulario utilizando la extensión Filter y toda su potencia, y, sin embargo, siendo el planteamiento algo más sencillo, puesto que, por ejemplo:

Código PHP:

$frm
->field->ValueFILTER_SANITIZE_STRING ); 
El anterior código estaría "sanitizando" utilizando un filtro determinado el valor del elemento "field" enviado en el formulario. Como se ve no hay que usar funciones como "filter_var()", y, sin embargo, los argumentos que admite el método "Value()" en este caso (todos opcionales) son los mismos que se utilizan en dicha función y para el mismo objetivo.

6º Hacer uso de métodos mágicos de PHP como "__get()", "__set()" y "__call()", por ejemplo, permite escribir cosas como esta:

Código PHP:

if( ! $frm->login->IsNull()  )
{
  
$frm->login->ValueFILTER_SANITIZE_STRING );
}
else
{
  die( 
'No proporcionaste ningún login de usuario' );

En este caso "login" no existe como propiedad de la clase "HtmlForm", y, en realidad representa al elemento con nombre "login" del formulario. Lo mismo cabe hacer con el resto de elements, pudiendo hacer uso de no pocos métodos hasta el momento: Value(), IsString(), IsArray(), IsBoolean(), etc., etc.

7º Como he mencionado, estos métodos trabajan junto con la función "filter_var()", lo que permite hacer cosas como esta para validar un determinado valor enviado junto al formulario:

Código PHP:

// for filters that accept options, use this format

$options = array(
    
'options' => array(
        
'default' => 3// value to return if the filter fails
        // other options here
        
'min_range' => 0
    
),
    
'flags' => FILTER_FLAG_ALLOW_OCTAL,
);

$var $form->field->IsInteger$options ); 
Las opciones, en este caso, están sacadas del propio ejemplo de uso de la función "filter_var()" de PHP, por si quiere verse que existen no pocas de ellas, que cada filtro tiene las suyas propias, sus propias "flags", etc. Nosotros, en el caso del ejemplo de arriba, nos ahorramos de especificar el filtro "INTEGER", puesto que ya lo hace la clase "HtmlForm" por nosotros al hacer uso de "IsInteger()".

8º Otro método útil es el método "Values()", que retornará todos los valores enviados en un formulario, pero, opcionalmente, se comportará igual que la función "filter_var_array()", que permite a su vez filtrar y/o validar todos los elementos de un formulario "a la vez".

En definitiva, no siendo tan tonto como para pensar que no pueda hacerse de mejores formas, sí encuentro (modestia aparte) que la clase "HtmlForm", siendo una sola clase (ojo) y de no demasiadas líneas de código ni complejidad, cumple con su objetivo e incluso me atrevería a decir que no me ha quedado mal del todo, a falta claro está de algunas cosas que ya tengo pensadas, como la de dar la posibilidad de ordenar los elementos de un formulario, de añadirlos en un lugar determinado, permitir añadir HTML puro y duro (ya veremos cómo), etc., etc.

Y no digo más que me enrrollo siempre más que las persianas. ¡Pues no he dicho que iba a ser breve, claro y conciso! Ah, que no lo he dicho.
Responder Con Cita