Zend_Form_Element encapsula
elementos de formulario individualmente, con las siguientes áreas de
responsabilidad:
Zend_Form_Element, funciona por defecto para
varios casos, pero es mejor extender la clase para elementos con fines
especiales de uso común. Adicionalmente, Zend Framework contiene un
número de elementos XHTML estándar; puede leer de ellos en el capítulo Elementos
Estándares
Zend_Form_Element hace uso de Zend_Loader_PluginLoader
para permitir a los desarrolladores especificar ubicaciones de
validadores, filtros y decoradores alternos. Cada uno tiene su
propio cargador de plugin asociado a él y métodos de acceso
generales usados para su recuperación y modificación.
setPluginLoader($loader, $type):
$loader es el propio objeto cargador, mientras
$type es uno de los tipos arriba mencionados. Esto
establece el cargador de plugin para el tipo dado en el objeto
cargador recién especificado.
getPluginLoader($type): obtiene el cargador de
plugin asociado con $type.
addPrefixPath($prefix, $path, $type = null): agrega
una asociación prefijo/ruta para el cargador especificado por
$type. Si $type es null, se intentará
agregar la ruta a todos los cargadores, añadiendo el prefijo a
cada "_Validate", "_Filter" y "_Decorator"; y agregandole
"Validate/", "Filter/" y "Decorator/" a la ruta. Si tiene todas
sus clases extras para elementos de formulario dentro de
una jerarquía común, este método es conveniente para establecer
el prefijo para todas ellas.
addPrefixPaths(array $spec): le permite añadir
varias rutas de una sola vez a uno o más cargadores de plugin.
Se espera cada elemento de la matriz sea un array con claves
'path', 'prefix', y 'type'.
Zend_Filter, y
Zend_Form_Element que soportan cadenas de filtros,
permitiéndole especificar múltiples filtros secuenciales a utilizar.
El filtrado sucede tanto en la validación como cuando recupera el
valor del elemento vía getValue():
Zend_Form_Element usando
addPrefixPath(). Por ejemplo, si tiene filtros
con el prefijo 'My_Filter', puede indicárselo a
Zend_Form_Element de la siguiente manera:
getUnfilteredValue():
addFilter($nameOfFilter, array $options = null)
addFilters(array $filters)
setFilters(array $filters) (sobreescribe todos los
filtros)
getFilter($name) (recupera un objeto filtro por su
nombre)
getFilters() (recupera todos los filtros)
removeFilter($name) (elimina un filtro por su
nombre)
clearFilters() (elimina todos los filtros)
Zend_Form cada elemento contiene su
propia cadena de validadores, consistente en validadores
Zend_Validate_*.
Zend_Form_Element usando
addPrefixPath(). Por ejemplo, si tiene validadores
con el prefijo 'My_Validator', puede indicárselo a
Zend_Form_Element de la siguiente manera:
true como segundo parámetro:
addValidator() como un
array:
Zend_Validate_StringLenth con los
parámetros $min y $max:
$options de
Zend_Form_Element::addValidator() le permite
hacerlo proporcionando la clave 'messages' y estableciendolos en
un array de pares clave/valor para especificar las plantillas
de mensaje. Necesitará conocer los códigos de error de los
diferentes tipos de error de un validador en particular.
Zend_Translate_Adapter
con su formulario. Los códigos de error son automáticamente
pasados al adaptador por el decorador Errors por defecto; puede
especificar su propias cadenas de mensaje de error mediante la
creación de traducciones para los varios códigos de error de
sus validadores.
addValidators(). Su uso básico es pasar una matriz de
arrays, donde cada array contenga de 1 a 3 valores,
correspondientes al constructor de addValidator():
isValid():
Zend_Form_Element::isValid() siempre filtra los
valores antes de la validación a través de la cadena de filtros.
Vea la sección de
filtros para más información.
Zend_Form_Element::isValid() soporta un argumento
adicional, $context.
Zend_Form::isValid() pasa todo el conjunto de datos
procesados a $context cuando valida un formulario,
y Zend_Form_Element::isValid(), a su vez, lo pasa a
cada validador. Esto significa que puede escribir validadores
que son conscientes de los datos pasados a otros elementos del
formulario. Como ejemplo, considere un formulario de registro
estándar que tiene campos para la contraseña y la confirmación
de la contraseña; una validación sería que los dos campos
coincidan. Este validador puede tener un aspecto como el
siguiente:
breakChainOnFailure falle su validación. Asegúrese de
especificar sus validadores en un orden razonable.
setRequired(true). Por defecto, esta
bandera es false, lo que significa que pasará su cadena de
validadores si ningún valor es pasado a isValid().
Puede modificar este comportamiento en un número de maneras:
isValid(),
los validadores serán saltados. Puede intercalar esta
bandera usando el método de acceso
setAllowEmpty($flag); cuando la bandera es
false, si un valor es pasado, los validadores seguirán
ejecutándose.
isValid() añadirá uno
en la cima de la pila, con la bandera
breakChainOnFailure establecido. Esto hace que
la bandera requerida tenga un significado semántico: si
ningún valor es pasado, inmediatamente invalidamos el envío
y se le notifica al usuario, e impedimos que otros
validadores se ejecuten en lo que ya sabemos son datos
inválidos.
setAutoInsertNotEmptyValidator($flag); esto
prevendrá a isValid() de colocar un validador
'NotEmpty' en la cadena de validaciones.
Zend_Form_Element implementa
Zend_Validate_Interface, significando un elemento
puede también usarse como un validador en otro, cadenas de
validación no relacionadas al formulario.
setRequired($flag) y
isRequired() permiten establecer y recuperar el
estado de la bandera 'required'. Cuando se le asigna un
booleano true, esta bandera requiere que el
elemento esté presente en la información procesada por
Zend_Form.
setAllowEmpty($flag) y
getAllowEmpty() permiten modificar el
comportamiento de elementos opcionales (p.e., elementos
donde la bandera required es false). Cuando la bandera
'allow empty' es true, valores vacíos no pasarán la cadena
de validadores.
setAutoInsertNotEmptyValidator($flag) permite
especificar si realmente un validador 'NotEmpty' será
añadido el inicio de la cadena de validaciones cuando un
elemento es requerido. Por defecto, esta bandera es true.
addValidator($nameOrValidator, $breakChainOnFailure = false, array $options = null)
addValidators(array $validators)
setValidators(array $validators) (sobreescribe todos los validadores)
getValidator($name) (recupera un objeto validador por nombre)
getValidators() (recupera todos los validadores)
removeValidator($name) (elimina un validador por nombre)
clearValidators() (elimina todos los validadores)
addErrorMessage($message): añade un mensaje de
error para mostrarlos en forma de errores de validación. Puede
llamarlo más de una vez, y los nuevos mensajes nuevos son
añadidos a la pila.
addErrorMessages(array $messages): añade
múltiples mensajes de error para mostrarlos en forma de errores de
validación.
setErrorMessages(array $messages): añade
múltiples mensajes de error para mostrarlos en forma de errores de
validación, sobreescribiendo todos los mensajes de error
previamente establecidos.
getErrorMessages(): recupera la lista de
mensajes de error personalizados que fueron definidos.
clearErrorMessages(): remueve todos los
mensajes de error personalizados que hayan sido definidos.
markAsError(): marca al elemento como que falló
la validación.
hasErrors(): determina si el elemento ha
fallado la validación o ha sido marcado como inválido.
addError($message): añade un mensaje a la pila
de mensaje de error personalizados y marca al elemento como
inválido.
addErrors(array $messages): añade varios
mensajes a la pila de mensajes de error personalizados y
marca al elemento como inválido.
setErrors(array $messages): sobreescribe el
mensaje de error personalizado en la pila con los mensajes
previstos y marca al elemento como inválido.
Zend_Form_Element intenta resolver este problema mediante
el uso de "decoradores". Los decoradores son clases simples que tienen
métodos de acceso al elemento y métodos para generar el contenido. Para
obtener mayor información sobre cómo trabajan los decoradores, consulte
por favor la sección sobre
Zend_Form_Decorator.
Zend_Form_Element son:
Zend_Form_Element especifica el auxiliar
vista 'formText', pero cada subclase especifica diferentes
auxiliares.
Zend_View_Helper_FormErrors. Si no está
presente, no se añade nada.
Zend_View_Helper_FormLabel, y
envolviéndola en una etiqueta <dt>. Si ninguna etiqueta es
provista, solo la etiqueta de la definición es generada.
Zend_Config.
This is some descriptive text regarding the element.
Zend_Form_Element utiliza una clase
decorador como mecanismo de búsqueda para la recuperación de
decoradores. Como resultado, no puede registrar múltiples
decoradores del mismo tipo; decoradores subsecuentes
simplemente sobreescribirán aquellos que ya existían.
addDecorator(), pase una matriz con un
solo elemento, con el alias apuntando al nombre o objeto
decorador:
addDecorators() y
setDecorators(), necesitará pasar la opción
'decorator' en la matriz representando el decorador:
addDecorator($nameOrDecorator, array $options = null)
addDecorators(array $decorators)
setDecorators(array $decorators) (sobreescribe
todos los decoradores)
getDecorator($name) (recupera un objeto decorador
por su nombre)
getDecorators() (recupera todos los decoradores)
removeDecorator($name) (elimina un decorador por su
nombre)
clearDecorators() (elimina todos los decoradores)
Zend_Form_Element también utiliza la sobrecarga para
permitir generar decoradores específicos. __call()
interceptará métodos que comiencen con el texto 'render' y utilizará
el resto del nombre del método para buscar un decorador; si se
encuentra, entonces será generado render() del
decorador. Como ejemplo:
Zend_Form_Element manipula una variedad de atributos y
medatados del elemento. Atributos básicos incluyen:
setName() y getName().
setLabel() y getLabel().
setOrder() y getOrder().
setValue() y
getValue().
setDescription() y
getDescription().
setRequired() y getRequired(). Esta
bandera es false por defecto.
setAllowEmpty() y getAllowEmpty().
Esta bandera es true por defecto.
setAutoInsertNotEmptyValidator($flag) y determine
el valor con autoInsertNotEmptyValidator().
Zend_Form_Element
utiliza la sobrecarga para facilitar el acceso a ellos:
Zend_Form contiene un buen número de elementos
estándar; por favor lea el capítulo Elementos Estándar para
todos los detalles.
Zend_Form_Element tiene muchos, muchos métodos. Lo que
sigue es un sumario de sus funciones, agrupados por tipo:
setOptions(array $options)setConfig(Zend_Config $config)setTranslator(Zend_Translate_Adapter $translator = null)getTranslator()setDisableTranslator($flag)translatorIsDisabled()setName($name)getName()setValue($value)getValue()getUnfilteredValue()setLabel($label)getLabel()setDescription($description)getDescription()setOrder($order)getOrder()setRequired($flag)getRequired()setAllowEmpty($flag)getAllowEmpty()setAutoInsertNotEmptyValidator($flag)autoInsertNotEmptyValidator()setIgnore($flag)getIgnore()getType()setAttrib($name, $value)setAttribs(array $attribs)getAttrib($name)getAttribs()setPluginLoader(Zend_Loader_PluginLoader_Interface $loader, $type)getPluginLoader($type)addPrefixPath($prefix, $path, $type = null)addPrefixPaths(array $spec)addValidator($validator, $breakChainOnFailure = false, $options = array())addValidators(array $validators)setValidators(array $validators)getValidator($name)getValidators()removeValidator($name)clearValidators()isValid($value, $context = null)getErrors()getMessages()addFilter($filter, $options = array())addFilters(array $filters)setFilters(array $filters)getFilter($name)getFilters()removeFilter($name)clearFilters()setView(Zend_View_Interface $view = null)getView()addDecorator($decorator, $options = null)addDecorators(array $decorators)setDecorators(array $decorators)getDecorator($name)getDecorators()removeDecorator($name)clearDecorators()render(Zend_View_Interface $view = null)Zend_Form_Element acepta tanto una
matriz de opciones como un objeto Zend_Config
conteniendo opciones, y esto puede configurarse usando
setOptions() o setConfig(). Hablando de
manera general, las claves son nombradas de la siguiente manera:
Zend_Form_Element, entonces el valor provisto será
pasado a el método.
prefixPath será pasado a
addPrefixPaths()
setAttrib (aunque
setAttribs setConfigsetOptionssetPluginLoadersetTranslatorsetViewZend_Form_Element. Las razones
comunes para hacer esto incluyen:
init(), el cual puede usarse para añadir una lógica de
inicialización personalizada a su elemento, y
loadDefaultDecorators(), el cual puede usarse para
establecer una lista de decoradores usados por su elemento de manera
predeterminada.
StringTrim, validados con una expresión regular, y que
quiere usar un decorador personalizado que ha creado para
mostrarlos, 'My_Decorator_TextItem'; adicionalmente, tiene un número
de atributos estándars, incluyendo 'size', 'maxLength', y 'class'
que quisiera especificar. Puede definir un elemento tal como sigue:
My_Element_Text,
y mostrará el comportamiento que ha especificado.
Zend_Form_Element es el método
loadDefaultDecorators(). Este método carga
condicionalmente un grupo de decoradores predefinidos para su
elemento; puede querer sustituir su propio decorador en su clase
extendida:
Zend_Form_Element para
conocer todos los métodos disponibles.