válido para Symfony 1.3 y 1.4
Índice de contenidos
- Widgets y validadores propios
- Cómo funciona un widget y un validador
- Creando un widget simple y un validador
- El widget de direcciones con Google Maps
- Conclusiones
Un objeto de la clase sfWidgetForm representa la implementación visual
necesaria para modificar los datos relacionados. Una cadena de texto por ejemplo se
puede editar con un cuadro de texto simple o con un editor WYSIWYG. Para
permitir una mejor configuración, la clase sfWidgetForm tiene dos propiedades
importantes: options y attributes.
options: se emplean para configurar el widget (por ejemplo la consulta a
la base de datos cuando se crea una lista de elementos para mostrar en una
lista desplegable)
attributes: atributos HTML que se añaden al elemento antes de mostrarlo
Además, la clase sfWidgetForm implementa dos métodos importantes:
configure(): define qué opciones son opcionales y cuales obligatorias.
Aunque redefinir el constructor no es una buena práctica, el método configure()
se puede redefinir sin problemas.
render(): genera el código HTML del widget. El primer argumento del método
es obligatorio e indica el nombre del widget HTML. El segundo argumento es
opcional e indica el valor.
Un objeto sfWidgetForm no sabe nada acerca de su nombre o su valor. El
componente sólo se encarga de mostrar el widget. El nombre y el valor los
gestiona un objeto de tipo sfFormFieldSchema, que es lo que une los datos
con los widgets.
La clase sfValidatorBase es la clase de la que heredan todos los validadores.
El método sfValidatorBase::clean() es el más importante de esta clase, ya
que comprueba si el valor es válido en función de las opciones indicadas.
Internamente el método clean() realiza diferentes acciones:
trim)doClean() del validadorEl método doClean() es el método que incluye toda la lógica de validación. No
es una buena práctica redefinir el método clean(), ya que es preferible
incluir toda la lógica propia en el método doClean().
Un validador también se puede utilizar como un componente independiente para
comprobar la integridad de los datos introducidos. El validador sfValidatorEmail
comprueba por ejemplo si el email es válido:
$v = new sfValidatorEmail(); try { $v->clean($request->getParameter("email")); } catch(sfValidatorError $e) { $this->forward404(); }
Cuando se asocia el formulario con los valores de la petición, el objeto sfForm
guarda tanto los valores originales (sucios) como los validados (limpios).
Los valores originales se utilizan al volver a mostrar el formulario, mientras
que los valores validados se utilizan en la aplicación (por ejemplo para guardar
el objeto).
Los objetos sfWidgetForm y sfValidatorBase también tienen otras opciones:
algunas son opcionales y otras son obligatorias. Estas opciones se definen en
el método configure() de cada clase mediante:
addOption($nombre, $valor): define una opción con un nombre y un valor inicialaddRequiredOption($nombre): define una opción obligatoriaEstos dos métodos son muy útiles porque aseguran que se pasan correctamente los valores de los que dependen los validadores y los widgets.
válido para Symfony 1.3 y 1.4