Hola, estoy buscando alguna clase que gestione los formularios o información relacionada. Puntualizo lo de gestionar porque no quiero que genere el html del formulario ya que trabajo con plantillas.
Un saludo
| |||
Re: Clase Formulario |
| ||||
Re: Clase Formulario He buscado por internet pero no he encontrado lo que busco. Me gustaría poner en común mis ideas para poder aclararme ya que tengo varias dudas de cómo implementarlo. La estructura sería la siguiente:
Código:
Hasta ahora, yo devolvía un único valor del proceso con variables de sesión. Lo leía y mostraba el mensaje correspondiente.formulario -> proceso -> resultado (que podría ser el mismo formulario) Esto tiene el claro inconveniente de no poder listar más de un error. Esto es una funcionalidad que quiero implementar. Tengo una clase CForm y una clase CFormField con los siguientes campos: (no pongo los métodos para no hacer el post muy extenso) Código PHP: Otro quebradero de cabeza es dónde instanciar los mensajes de error. Ahora mismo, lo hago en la clase CForm pero me pregunto si no sería mejor devolver unos códigos de error e instanciar los mensajes fuera de la clase. En definitiva, tengo muchas dudas y agradecería cualquier crítica o consejo. Última edición por jerkan; 27/12/2007 a las 06:10 |
| ||||
Re: Clase Formulario Hola, no entiendo bien tus quebraderos de cabeza. Creo que vas bien. Tiene sentido lo que comentas: 1.- Hay validaciones que son propias del formato del campo y validaciones que tienen que ver con la relación entre los campos. 2.- De la misma forma, hay errores de cada tipo. 3.- Con respecto a instanciar los errores a qué te refieres exactamente? El String que representa un error? |
| ||||
Re: Clase Formulario Hola pragone, gracias por tu respuesta. Sobre el punto 3, me refiero al string que describe el error. Creo que lo mejor es instanciar los mensajes dentro de la clase. Así, tengo esta tarea centralizada. Comentar que he cambiado los atributos $errors por $log ya que no sólo pondré mensajes de error sino también mensajes de información como 'guardado correctamente'. También he añadido un campo $result que indicará si se ha producido algún error en la validación del formulario. |
| ||||
Re: Clase Formulario Creo vas bien en tu concepto, aunque a lo mejor podrias separar mas lo que son dos cosas, por decir, validador de campo y validador de formulario (para validar grupos de validadores) asi no rompes la estructura que tienes. Saludos. |
| ||||
Re: Clase Formulario ¿Te refieres a hacer una clase validador_campo y otra clase validador_formulario o cómo? Las validaciones de los campos las hago en la clase CFormField y las validaciones del formulario en la clase CForm. Última edición por jerkan; 28/12/2007 a las 04:40 |
| ||||
Re: Clase Formulario Como comentario, te recomendaría que usaran interfaces para los objetos validadores de forma de que sea fácilmente extensible. Con respecto a los mensajes, si lo que quieres es extensibilidad, entonces mejor ten una clase que reciba uno de los códigos y devuelva el String. De esta forma podrías, en un futuro, utilizar distintos idiomas. |
| ||||
Re: Clase Formulario Me parece una buena idea hacer una clase para cada validador, pero no tengo claro cómo implementarlo. A ver qué os parece esta primera idea: Código PHP: |
| ||||
Re: Clase Formulario No importa que los tengas que crear, por decir te dejo un ejemplo del Beta de mi clase form de mi libreria: Código PHP: Todo se hace con dos interfaces: Código PHP: Saludos. Última edición por GatorV; 29/12/2007 a las 13:04 |
| ||||
Re: Clase Formulario Gracias, GatorV, por la aportación. Al ver tú código, me ha surgido una curiosidad acerca de tus clases 'FormField'. ¿Por qué tienes una clase para cada tipo de input (text, password, etc.) ? Otra duda que tengo es por qué los validadores son interfaces y no clases abstractas. Un saludo |
| ||||
Re: Clase Formulario Porque asi separo todos los "componentes" que mi clase implementa como Textboxes, Textareas, Input Fields, HTML Areas, Date Picker, Color Picker, Select Box, SQL Select Box, etc. Al tener todas separadas es mas facil de leer en el codigo. Los validadores "superiores" solo son interfaces que implementan los validadores reales, esto hace que tu puedas hacer validadores "on the fly" y que funcionen con la clase: Código PHP: Saludos. |
| ||||
Re: Clase Formulario Si, sabia que no me habia explicado bien, la idea de una interface es asegurarte que todas las clases compartan una "firma", asi tu codigo puede funcionar con cualquier clase que tenga esa "firma" en particular, y sabes que puedes crear tus propios validadores que compartan esa firma, por decir: Código PHP: Saludos. |
| ||||
Re: Clase Formulario Ahora sí, gracias. De todas formas, no entiendo por qué lo implementas con interfaces y no con una clase base abstracta. Yo es que lo veo más como una clase base Validator de la que heredan todos los validadores específicos. |
| ||||
Re: Clase Formulario Mmm se me hace mas sencillo obligar la implementacion de la firma, a usar una clase base, porque creo cuando usas Class Hinting (o sea forzar a que un parametro sea de una clase) solo funciona con clases especificas e interfaces... Aparte no tengo niguna funcionalidad especifica en la interfaz, solo necesito que implementen los metodos en especifico, cualquier otro metodo o funcion es de ese validador. Saludos. |
| ||||
Re: Clase Formulario Intentando implementar el validador con una clase base abstracta he encontrado el por qué no se puede hacer así. Haciéndolo con una clase base abstracta, el intérprete de PHP da error si en las clases hijo no coincide la definición del método validate. Es decir, ésto da error: Código PHP: |
| ||||
Re: Clase Formulario Es por eso que yo separe los validadores en dos grupos, los que actúan sobre el valor de un campo en especifico, y los que comparan valores de dos o varios campos. Aparte de que la interface también te obliga a usar la firma que hayas definido. Saludos |
| ||||
Re: Clase Formulario Hola.... feliz año!!! Veo que esto toma bastante forma. Por mi parte hago otro par de aportaciones: Por un lado, la diferencia entre utilizar una interfaz y una clase abstracta es que la interfaz no incluye absolutamente nada de código, mientras que una clase abstracta sí... De hecho, se podría decir que una interfaz es una clase abstracta en la que todos sus métodos son abstractos. En muchas ocasiones pueden ser intercambiados y eso resulta útil sobre todo en lenguajes que no soportan herencias múltiples como es el caso de PHP (que a mi forma de ver es como debería ser... pero eso es otra discusión). En fin... filosóficamente hablando deberías implementar algo como interfaz si distintos tipos de objeto que no necesariamente deben estar en el mismo "árbol genealógico" deben implementar unas funcionalidades. Si por el contrario todas las clases que deben implementar la funcionalidad (lease métodos y propiedades) deben ser familia y no deben heredar de más nadie, entonces una clase abstracta te sirve. Con respecto a implementar varias clases para cada tipo de campo, estoy de acuerdo con GatorV. Porque esto te permite añadir funcionalidades especiales por cada tipo de validación sin tener que hacer una sola clase con un gran switch-case. |
| ||||
Re: Clase Formulario Al final, opté por clases abstractas para los validadores: Código PHP: |