Zend_Form es usada para agregar elementos de
formulario, desplegar grupos y subformularios. Éstos pueden ejecutar las
siguientes acciones en estos elementos:
Zend_Form pueden ser
complejos, probablemente su mejor uso es para formularios simples; es
mejor utilizarlo para desarrollar aplicaciones rápidas y de prototipado.
Zend_Form es iterable, e iterará sobre elementos, grupos que
mostrar y subformularios, usando el orden en el cual han sido registrados
y en cualquier índice de orden que cada uno pueda tener. Esto es útil
en casos donde desee generar los elementos manualmente en el orden apropiado.
Zend_Form radica en la habilidad para servir como
fábrica para elementos y grupos, así como también la habilidad de generarse
a sí mismo a través de decoradores.
Zend_Form hace uso de
Zend_Loader_PluginLoader para permitir a los
desarroladores especificar la ubicación de elementos y decoradores
alternativos. Cada uno tiene su propio plugin loader asociado, y
métodos de acceso genéricos son usados para recuperar y modificar
cada uno.
setPluginLoader($loader, $type): $loader es el propio
objeto plugin loader, mientras $type es uno de los tipos
especificados arriba. Esto establece el plugin loader para el
tipo dado al objeto loader recién especificado.
getPluginLoader($type): recupera el plugin loader
asociado con $type.
addPrefixPath($prefix, $path, $type = null): agrega
una asociación prefijo/ruta al loader especificado por $type. Si
$type es nulo, intentará añadir una ruta a todos los loaders,
añadiendo el prefijo "_Element" y "_Decorator"; y añadiendo la
ruta con "Element/" y "Decorator/". Si tiene todas sus clases
form element extras bajo una jerarquía común, éste es un método
coveniente para establecer el prefijo de base para ellas.
addPrefixPaths(array $spec): le permite añadir varias
rutas en uno o mas plugin loaders. Se espera que cada elemento
del array sea un array con las claves 'path', 'prefix' y 'type'.
Zend_Form usando los siguientes métodos:
addElementPrefixPath($prefix, $path, $type = null):
Igual que addPrefixPath(), debe especificar un
prefijo y ruta de clase. $type, cuando se especifica,
tiene que ser uno de los tipos plugin loader especificados por
Zend_Form_Element; vea la sección elemento plugins
para más información de valores válidos para
$type. Si $type no es especificado, el
método asumirá que es un prefijo general para todos los tipos.
addDisplayGroupPrefixPath($prefix, $path):
Igual que addPrefixPath(), debe especificar un
prefijo y ruta de clase; sin embargo, dado que los grupos de visualización (display groups)
sólo soportan decoradores como plugins, $type no es
necesario.
Zend_Form proporciona varios métodos de acceso para añadir
y eliminar elementos de el formulario. Éstos pueden tomar instancias
de objetos de elemento o servir como fábricas para instanciar el
objeto elemento a sí mismo.
addElement(). Este método puede tomar también un objeto
de tipo Zend_Form_Element (o de una clase extendiendo
Zend_Form_Element), o argumentos para construir un nuevo
elemento -- incluyendo el elemento tipo, nombre y algunas opciones de
configuración.
addElement() implementa una interfaz fluida; es
decir, retorna el objeto Zend_Form y no un
elemento. Esto se ha hecho para permitirle encadenar
multiples métodos addElement() u otros métodos formulario que
implementen una interfaz fluida (todos los establecedores en Zend_Form
implementan el patrón).
createElement(), el cual es esbozado abajo. Tenga en cuenta
de cualquier manera que createElement() no adjunta el
elemento al formulario.
addElement() en realidad emplea
createElement() para crear el elemento antes de
adjuntarlo al formulario.
getElement()
o usando sobrecarga para acceder al elemento como una propiedad de
objeto:
createElement()
permite hacer eso:
getValues();
getValue($name) le permite recuperar un solo
valor del elemento por su nombre:
setDefaults() o populate():
reset():
setElementDecorators() acepta una matriz de
decoradores, solo como setDecorators(), y
reescribirá cualquier decorador previamente determinado en cada elemento. En
este ejemplo, determinamos los decoradores para simplificar una ViewHelper
y una Label:
setElementDecorators() puede ser un array de
nombres de elemento; por defecto, especificar un array de ese tipo
determinará los decoradores especificados en esos elementos solamente. Puede
tambien pasar un tercer elemento, una bandera indicando si
esta lista de elementos es para propósitos de inclusión o exclusión;
si es falso, decorará todos los elementos
setElementDecorators() puede parecer
una buena solución, existen algunos casos donde puede
terminar con resultados inesperados, Por ejemplo,
los muchos elementos botones (Submit, Button, Reset),
actualmente usan la etiqueta como el valor del botón
y sólo usan los decoradores ViewHelper y DtDdWrapper --
previniendo una etiqueta adicional, errores, y sugerencias de
ser generadas; el ejemplo de arriba podría duplicar algún
contenido (la etiqueta).
trim() a todos los valores:
createElement($element, $name = null, $options = null)
addElement($element, $name = null, $options = null)
addElements(array $elements)
setElements(array $elements)
getElement($name)
getElements()
removeElement($name)
clearElements()
setDefaults(array $defaults)
setDefault($name, $value)
getValue($name)
getValues()
getUnfilteredValue($name)
getUnfilteredValues()
setElementFilters(array $filters)
setElementDecorators(array $decorators)
addElementPrefixPath($prefix, $path, $type = null)
addElementPrefixPaths(array $spec)
Zend_Form_DisplayGroup. Mientras puede ser instanciado
directamente, es mejor usar el método addDisplayGroup()
de la claseZend_Form. Este método toma un
array de elementos como primer argumento y el nombre para el grupo de
visualización como segundo argumento. Opcionalmente, se puede pasar en una array
de opciones o en un objeto Zend_Config como tercer argumento.
getDisplayGroup(), o mediante la sobrecarga usando el
nombre del grupo de visualización:
Zend_Config
addDisplayGroupPrefixPath() method.
setDisplayGroupDecorators() admite un array de
decoradores, al igual que setDecorators(), y sobreescribirá
cualquier conjunto de decoradores previo en cada grupo de visualización.
En este ejemplo, fijamos los decoradores a un fieldset (el decorador FormElements
es necesario para asegurar que los elementos son iterador):
Zend_Form utiliza la clase
Zend_Form_DisplayGroup para grupos de visualización.
Puede ocurrir que necesite extender esta clase con el fin
de obtener una funcionalid personalizada. addDisplayGroup()
no permite pasar una instancia determinada, pero permite especificar
la clase que usar como una de sus opciones, usando la clave
'displayGroupClass':
Zend_Form
intentará cargarla a través de Zend_Loader.
addDisplayGroup(array $elements, $name, $options = null)
addDisplayGroups(array $groups)
setDisplayGroups(array $groups)
getDisplayGroup($name)
getDisplayGroups()
removeDisplayGroup($name)
clearDisplayGroups()
setDisplayGroupDecorators(array $decorators)
addDisplayGroupPrefixPath($prefix, $path)
setDefaultDisplayGroupClass($class)
getDefaultDisplayGroupClass($class)
Zend_Form_DisplayGroup tiene los siguientes métodos,
agrupados por tipo:
setOptions(array $options)setConfig(Zend_Config $config)setAttrib($key, $value)addAttribs(array $attribs)setAttribs(array $attribs)getAttrib($key)getAttribs()removeAttrib($key)clearAttribs()setName($name)getName()setDescription($value)getDescription()setLegend($legend)getLegend()setOrder($order)getOrder()createElement($type, $name, array $options = array())addElement($typeOrElement, $name, array $options = array())addElements(array $elements)setElements(array $elements)getElement($name)getElements()removeElement($name)clearElements()setPluginLoader(Zend_Loader_PluginLoader $loader)getPluginLoader()addPrefixPath($prefix, $path)addPrefixPaths(array $spec)addDecorator($decorator, $options = null)addDecorators(array $decorators)setDecorators(array $decorators)getDecorator($name)getDecorators()removeDecorator($name)clearDecorators()setView(Zend_View_Interface $view = null)getView()render(Zend_View_Interface $view = null)setTranslator(Zend_Translate_Adapter $translator = null)getTranslator()setDisableTranslator($flag)translatorIsDisabled()Zend_Form o mas
originalmente, un objeto Zend_Form_SubForm. éste último
contiene decoradores apropiados para la inclusión en un formulario extenso (i.e.,
no se generan adicionales formulario etiquetas HTML, pero si grupos de
elementos). Para adjuntar un sub formulario, simplemente añádalo al formulario y déle
un nombre:
getSubForm($name) o sobrecarga usando el nombre
del sub formulario:
setSubFormDecorators().
En el siguiente ejemplo, determinaremos el decorador para todos los
subformularios que sera un simple campo (el decorador FormElements es
necesario para asegurar que los elementos son iterados):
addSubForm(Zend_Form $form, $name, $order = null)
addSubForms(array $subForms)
setSubForms(array $subForms)
getSubForm($name)
getSubForms()
removeSubForm($name)
clearSubForms()
setSubFormDecorators(array $decorators)
Zend_Form::ENCTYPE_URLENCODED y
Zend_Form::ENCTYPE_MULTIPART, correspondiente a los
valores 'application/x-www-form-urlencoded' y
'multipart/form-data', respectivamente; sin embargo, puede configurarlo
con cualquier tipo de codificación.
Zend_Form implementa la interfaz Countable
permitiéndole pasarlo como un argumento para contar:
Zend_Form es usada para acceder
elementos, grupos de visualización y subformularios, este es el único método para
acceder a los metadatos.
Zend_Form a este problema es los
Zend_Form pueden ser usados para generar
un formulario. El decorador FormElements iterará a través de todos los elementos en
un formulario -- elementos, grupos de visualización y subformularios -- y los generará,
devolviendo el resultado. Adicionalmente, los decoradores pueden ser usados
para envolver el contenido o anteponerlo o postponerlo.
Zend_Form son FormElements,
HtmlTag (envuelve una lista de definición) y Form; el código equivalente
para crearlos es como sigue:
<form>.
Zend_Config
Zend_Form usa una clase decorador
como un mecanismo buscador cuando se recuperan decoradores. Como
resultado, no se pueden registrar multiples decoradores del mismo
tipo; subsecuentemente los decoradores simplemente sobrescribirán esos
decoradores que existían antes.
addDecorator(), pase un array con un solo
elemento, con el alias apuntando al objeto decorador o
nombre:
addDecorators() y
setDecorators(), se necesitará pasar
la opción 'decorator' en el array representando el decorador:
addDecorator($decorator, $options = null)
addDecorators(array $decorators)
setDecorators(array $decorators)
getDecorator($name)
getDecorators()
removeDecorator($name)
clearDecorators()
Zend_Form también usa sobrecarga que permite generar
decoradores específicos. __call() interceptará métodos
que lleve con el texto 'render' y use el resto del nombre del método
para buscar un decorador; si se encuentran, serán generados por un
render() del decorador. Como ejemplo:
This is fieldset content
"); ]]>Zend_Form le permite validar un formulario entero de una vez,
o una parte de él, asi como también automatizar las respuestas de validación para
XmlHttpRequests (AJAX). Si los datos enviados no son válidos, contiene
métodos para recuperar los distintos códigos errores y los mensajes de
elementos y subformularios de validaciones fallidas.
isValid():
isValid() validará cada elemento requerido, y algún
elemento no requerido contenido en la data sometida.
isValidPartial($data):
isValidPartial() sólo intenta validar aquellos elementos
en la información para los cuales existen similares elementos; si un elemento es
no representado en la información, es pasado por alto.
processAjax() precisamente realiza eso:
getErrors() y
getMessages(), respectivamente:
getMessages() son un
array de pares de errores código/mensaje, getErrors() no
es necesario.
Zend_Form envía un
segundo argumento a cada método isValid() del elemento:
el array de los datos que se están validando. Esto puede ser usado por
validadores individuales para permitirles utilizar otros valores
enviados al determinar la validez de los datos. Un ejemplo
sería un formulario de registro que requiere tanto una contraseña
como una confirmación de la contraseña; el elemento contraseña puede usar la
confirmación de la contraseña como parte de su validación.
addErrorMessage($message): añade un mensaje de error
para desplegar en el formulario los errores de validación. Se debe llamar más
de una vez, y los nuevos mensajes son adicionados a la pila.
addErrorMessages(array $messages): añade múltiples
mensajes de error para desplegar en el formulario los errores de validación
setErrorMessages(array $messages): añade multiples
mensajes de error para desplegar en el formulario los errores de validación,
sobrescribiendo todos los mensajes de error previamente determinados.
getErrorMessages(): recupera la lista de
mensajes de error personalizados que han sido definidos.
clearErrorMessages(): remueve todos los mensajes
de error personalizados que han sido definidos.
markAsError(): marca el formulario como que la
validación ha fallado.
addError($message): añade un mensaje a la pila de
mensajes de error personalizados y señala al formulario como inválido.
addErrors(array $messages): añade muchos
mensajes a la pila de mensajes de error personalizados y señala al
formulario como inválido.
setErrors(array $messages): sobrescribe la
pila de mensajes de error personalizada con los mensajes proporcionados
y señala el formulario como inválido.
Zend_Form, agrupados por tipo:
setOptions(array $options)setConfig(Zend_Config $config)setPluginLoader(Zend_Loader_PluginLoader_Interface $loader, $type = null)getPluginLoader($type = null)addPrefixPath($prefix, $path, $type = null) addPrefixPaths(array $spec)addElementPrefixPath($prefix, $path, $type = null)addElementPrefixPaths(array $spec)addDisplayGroupPrefixPath($prefix, $path)setAttrib($key, $value)addAttribs(array $attribs)setAttribs(array $attribs)getAttrib($key)getAttribs()removeAttrib($key)clearAttribs()setAction($action)getAction()setMethod($method)getMethod()setName($name)getName()addElement($element, $name = null, $options = null)addElements(array $elements)setElements(array $elements)getElement($name)getElements()removeElement($name)clearElements()setDefaults(array $defaults)setDefault($name, $value)getValue($name)getValues()getUnfilteredValue($name)getUnfilteredValues()setElementFilters(array $filters)setElementDecorators(array $decorators)addSubForm(Zend_Form $form, $name, $order = null)addSubForms(array $subForms)setSubForms(array $subForms)getSubForm($name)getSubForms()removeSubForm($name)clearSubForms()setSubFormDecorators(array $decorators)addDisplayGroup(array $elements, $name, $options = null)addDisplayGroups(array $groups)setDisplayGroups(array $groups)getDisplayGroup($name)getDisplayGroups()removeDisplayGroup($name)clearDisplayGroups()setDisplayGroupDecorators(array $decorators)populate(array $values)isValid(array $data)isValidPartial(array $data)processAjax(array $data)persistData()getErrors($name = null)getMessages($name = null)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)setTranslator(Zend_Translate_Adapter $translator = null)getTranslator()setDisableTranslator($flag)translatorIsDisabled()Zend_Form es totalmente configurable mediante
setOptions() y setConfig() (o
pasando opciones o un objeto Zend_Config al
constructor). Usando estos métodos, se pueden especificar elementos formulario,
grupos de visualización, decoradores, y metadatos.
Zend_Form, entonces el valor proporcionado será
pasado al método. Si el accessor no existe, se asume que la clave
referencia a un atributo, y será pasado a
setAttrib().
prefixPaths será pasado a
addPrefixPaths()
elementPrefixPaths será pasado a
addElementPrefixPaths()
displayGroupPrefixPaths será pasado a
addDisplayGroupPrefixPaths()
setAttrib (aunque setAttribs *funcionará*)setConfigsetDefaultsetOptionssetPluginLoadersetSubFormssetTranslatorsetViewZend_Form. Esto tiene muchos beneficios:
init() para determinar elementos de formulario específicos y
de configuración:
loadDefaultDecorators():