5.1.1. Funcionamiento interno de sfWidgetForm
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étodoconfigure()
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.
Nota 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.
5.1.2. Funcionamiento interno de sfValidatorBase
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:
- en las cadenas de texto elimina el posible espacio en blanco inicial y final
(si se especifica la opción
trim
) - comprueba si el valor es vacío
- invoca el método
doClean()
del validador
El 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();
}
Nota 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).
5.1.3. El atributo options
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 obligatoria
Estos dos métodos son muy útiles porque aseguran que se pasan correctamente los valores de los que dependen los validadores y los widgets.