Elementos Enviados en el Formulario Estandard de Zend Framework Zend Framework viene con clases de elementos concretos cubriendo la mayoría de los
elementos de los formularios HTML. La mayoría simplemente especifica una vista de ayuda para
usar cuando se decora el elemento, pero varios ofrecen funcionalidad adicional. La siguiente
es una lista de todas las clases, así como también una descripción de la funcionalidad que
ofrecen. Zend_Form_Element_Button Usada para crear elementos HTML de tipo button,
Zend_Form_Element_Button extiende Zend_Form_Element_Submit,
derivandi sy funcionalidad personalizada. It specifies the 'formButton' view helper for
decoration. Like the submit element, it uses the element's label as the element value for display
purposes; in other words, to set the text of the button, set the value of the element.
The label will be translated if a translation adapter is present. Because the label is used as part of the element, the button element uses only the
ViewHelper and DtDdWrapper decorators. Después de llenar o validar un formulario, se puede verificar si el botón dado fue
pulsado usando el método isChecked(). Zend_Form_Element_Captcha Los CAPTCHAs son usados para prevenir el envio automático de formularios por los
robots y otros procesos automatizados. The Captcha form element allows you to specify which Zend_Captcha adapter you wish to utilize as a
form captcha. It then sets this adapter as a validator to the object, and uses a Captcha
decorator for rendering (which proxies to the CAPTCHA adapter). Adapters may be any adapters in Zend_Captcha, as well as any
custom adapters you may have defined elsewhere. To allow this, you may pass an
additional plugin loader type key, 'CAPTCHA' or 'captcha', when specifying a plugin
loader prefix path: addPrefixPath('My_Captcha', 'My/Captcha/', 'captcha');
]]> Los Captcha entonces pueden ser cargados usando el método
setCaptcha(), el cual puede tomar una instancia cualquiera
de CAPTCHA instance, o el nombre corto del adaptador captcha: setCaptcha(new Zend_Captcha_Figlet());
// Usando nombre corto:
$element->setCaptcha('Dumb');
]]> Si desea cargar sus elementos configuración, especifique la clave 'captcha' con un
array conteniendo la clave 'captcha', o ambas claves 'captcha' y 'captchaOptions': "Please verify you're a human",
'captcha' => array(
'captcha' => 'Figlet',
'wordLen' => 6,
'timeout' => 300,
),
));
// Usindo captcha y captchaOptions:
$element = new Zend_Form_Element_Captcha('foo', array(
'label' => "Please verify you're a human"
'captcha' => 'Figlet',
'captchaOptions' => array(
'captcha' => 'Figlet',
'wordLen' => 6,
'timeout' => 300,
),
));
]]> El decorador usado es determinado consultando el adaptador captcha. Por defecto, es
usado el Captcha decorator,
pero un adaptador puede especificar uno diferente vía su
métodogetDecorator(). Como ha notado, el adaptador CAPTCHA actúa él mismo como un validador para el
elemento. Adicionalmente, el validador NotEmpty no es usado y el elemento es marcado
como requerido. En la mayoría de los casos, usted no necesitará hacer nada más para
tener un captcha presente en su formulario. Zend_Form_Element_Checkbox Las casillas de verificación (checkboxes) HTML le permiten devolver un valor
específico, pero básicamente funcionan como los booleanos: cuando está marcada, el valor
es enviado; cuando no está marcada, no se envía nada. Internamente,
Zend_Form_Element_Checkbox fuerza este estado. Por defecto, si la casilla (checkbox) está marcada su valor es '1', y si no está
marcada su valor es '0'. You can specify the values to use using the
setCheckedValue() and
setUncheckedValue() accessors, respectively. Internally,
any time you set the value, if the provided value matches the checked value, then it is
set, but any other value causes the unchecked value to be set. Additionally, setting the value sets the checked property of
the checkbox. You can query this using isChecked() or simply
accessing the property. Using the setChecked($flag) method will
both set the state of the flag as well as set the appropriate checked or unchecked value
in the element. Please use this method when setting the checked state of a checkbox
element to ensure the value is set properly. Zend_Form_Element_Checkbox uses the 'formCheckbox' view helper.
The checked value is always used to populate it. Zend_Form_Element_File The File form element provides a mechanism for supplying file upload fields to your
form. It utilizes Zend_File_Transfer internally to provide this functionality, and the
FormFile view helper as also the
File decorator to display the form element. By default, it uses the Http transfer adapter, which
introspects the $_FILES array and allows you to attach
validators and filters. Validators and filters attached to the form element will be
attached to the transfer adapter. File form element usage The above explanation of using the File form element may seem arcane, but actual
usage is relatively trivial: setLabel('Upload an image:')
->setDestination('/var/www/upload');
// ensure only 1 file
$element->addValidator('Count', false, 1);
// limit to 100K
$element->addValidator('Size', false, 102400);
// only JPEG, PNG, and GIFs
$element->addValidator('Extension', false, 'jpg,png,gif');
$form->addElement($element, 'foo');
]]> También debe asegurarse de que se ha provisto un tipo de codificación corecto al
formulario; se debe utilizar 'multipart/form-data'. Se puede hacer esto
estableciendo el atributo 'enctype' en el formulario: setAttrib('enctype', 'multipart/form-data');
]]> After the form is validated successfully, you must receive the file to store it
in the final destination using receive(). Additionally you
can determinate the final location using getFileName(): isValid) {
print "Ohoh... validation error";
}
if (!$form->foo->receive()) {
print "Error receiving the file";
}
$location = $form->foo->getFileName();
]]>Ubicaciones Predeterminadas para la Carga de Archivos Por defecto, los archivos son cargados al directorio temp del sistema. Valores de archivo Dentro de HTTP, un elemento file no tiene valor. Por tanto y a causa de razones
de seguridad usted solo obtendrá el nombre del archivo cargado llamando a getValue()
y no el destino completo. si usted necesita la información completa llame a
getFileName() y le devolverá el destino y nombre de archivo completo. Per default the file will automatically be received when you call
getValues() on the form. The reason behind this behaviour
is, that the file itself is the value of the file element. getValues();
]]> Therefor another call of receive() after calling
getValues() will not have an effect. Also creating a
instance of Zend_File_Transfer will not have an effect as
there no file anymore to receive. Still, sometimes you may want to call getValues() without
receiving the file. You can archive this by calling
setValueDisabled(true). To get the actual value of this
flag you can call isValueDisabled(). Explicit file retrievement First call setValueDisabled(true). setLabel('Upload an image:')
->setDestination('/var/www/upload')
->setValueDisabled(true);
]]> Now the file will not be received when you call
getValues(). So you must call
receive() on the file element, or an instance of
Zend_File_Transfer yourself. getValues();
if ($form->isValid($form->getPost())) {
if (!$form->foo->receive()) {
print "Upload error";
}
}
]]> There are several states of the uploaded file which can be checked with the following
methods: isUploaded(): Checks if the file element has been
uploaded or not. isReceived(): Checks if the file element has already
been received. isFiltered(): Checks if the filters have already been
applied to the file element or not. Checking if an optional file has been uploadedsetLabel('Upload an image:')
->setDestination('/var/www/upload')
->setRequired(false);
$element->addValidator('Size', false, 102400);
$form->addElement($element, 'foo');
// The foo file element is optional but when it's given go into here
if ($form->foo->isUploaded()) {
// foo file given... do something
}
]]>Zend_Form_Element_File soporta también archivos múltiples. Para
llamar el método setMultiFile($count) usted puede establecer la
cantidad de elementos file que usted desea crear. Esto le previene de establecer la
misma configuración varias veces. Configuración de múltiples archivos Crear un elemento multi archivo es lo mismo que querer configurar un elemento
único. Sólo tiene que llamar a setMultiFile()
adicionalmente después de la creación: setLabel('Upload an image:')
->setDestination('/var/www/upload');
// asegura mínimo 1, maximo 3 archivos
$element->addValidator('Count', false, array('min' => 1, 'max' => 3));
// limita a 100K
$element->addValidator('Size', false, 102400);
// solo JPEG, PNG, y GIFs
$element->addValidator('Extension', false, 'jpg,png,gif');
// define 3 elementos file idénticos
$element->setMultiFile(3);
$form->addElement($element, 'foo');
]]> En su vista usted ahora obtendrá 3 elementos para carga de archivos idénticos los
cuales comparten la misma configuración. Para obtener el conjunto del número de
archivos múltiples simplemente llame a getMultiFile(). Elementos File en Subformularios Cuando usted use elementos file en subformularios debería establecer nombres
únicos. Así, cuando usted nombre su elemento file en el subformulario1, debe darle
un nombre diferente en el subformulario2. Tan pronto como haya dos elementos file nombrados de forma idéntica, el segundo
elemento no se mostrará o enviará. Para limitar el tamaño del archivo, el cual es cargado por el cliente, debe
establecer el tamaño máximo de archivo que el formulario acepta . Esto limitará el
tamaño del archivo en el lado del cliente configurando la opción
MAX_FILE_SIZE en el formulario. Tan pronto como establezca
este valor usando el método setMaxFileSize($size), será
generado con el elemento file. setLabel('Upload an image:')
->setDestination('/var/www/upload')
->addValidator('Size', false, 102400) // límite en 100K
->setMaxFileSize(102400); // limita el tamaño del archivo en el lado del cliente
$form->addElement($element, 'foo');
]]>MaxFileSize con elementos file múltiples Cuando usted usa elementos file múltiples en los formularios tiene que establecer
el MAX_FILE_SIZE una sola vez. Establecerlo otra vez
sobreescribirá el valor previamente establecido. Note que usted puede establecer MAX_FILE_SIZE una sola
vez, incluso si usa múltiples formularios. Zend_Form_Element_Hidden Los elementos Hidden simplemente inyectan datos que deben ser enviados, pero que el
usuario no debe manipular. Zend_Form_Element_Hidden logra esto a
través del uso del helper de vista 'formHidden'. Zend_Form_Element_Hash Este elemento provee protección de ataques desde CSRF sobre formularios, asegurando
que el dato es enviado por la sesión del usuario que generó el formulario y no por un
script malicioso. La protección se logra mediante la adición de un elemento hash a un
formulario y verificandolo cuando el formulario es enviado. El nombre del elemento hash debe ser único. Se recomienda usar la opción
salt para el elemento, dos hashes con el mismo nombre y
diferentes salts no chocan: addElement('hash', 'no_csrf_foo', array('salt' => 'unique'));
]]> Puede establecer el salt más tarde usando el método
setSalt($salt). Internamente, el elemento almacena un identificador único usando
Zend_Session_Namespace, y lo comprueba en el momento que se
envía (comprueba que el TTL no ha espirado). El validador 'Identical' entonces es usado
para asegurarse que el hash enviado marcha con el hash alamacenado. El helper de vista 'formHidden' es usado para generar el elemento en el formulario.
Zend_Form_Element_Image Las imágenes pueden ser usadas como elementos de formulario, y le permiten
especificar elementos gráficos como botones de formulario. Los elementos Image necesitan una imagen fuente.
Zend_Form_Element_Image le permite especificar esto usando el
método de acceso setImage() (o clave de configuración 'image').
Opcionalmente, también puede especificar un valor para utilizar al momento de enviar la
imagen utilizando el método de acceso setImageValue() (o clave
de configuración 'imageValue'). Cuando el valor establecido para el elemento sea igual a
imageValue, entonces el método de acceso
isChecked() devolverá TRUE. Los elementos Image usan el Decorador de Imagen para generar (así como el estandard Errors, HtmlTag, y
decorador Label). Opcionalmente, puede especificar una etiqueta para el decorador
Image que luego envuelva al elemento imagen. Zend_Form_Element_MultiCheckbox En ocasiones, se tiene un conjunto de checkboxes, y se desea agrupar los resultados.
Esto es como un Multiselect, pero en lugar de estar en una lista desplegable, necesita
mostrarlos en pares checkbox/value (casilla de verificación/valor). Zend_Form_Element_MultiCheckbox hace esto sencillo. Like all
other elements extending the base Multi element, you can specify a list of options, and
easily validate against that same list. The 'formMultiCheckbox' view helper ensures that
these are returned as an array in the form submission. Por defecto, este elemnto requiere un validador InArray el
cual valida contra el array de llaves de las opciones registradas. Se puede desactivar
esta caracteristica llamando a
setRegisterInArrayValidator(false), o pasando un valor
falso a la configuración de llaves registerInArrayValidator. Se puede manipular las opciones de checkbox usando los siguinetes métodos: addMultiOption($option, $value)addMultiOptions(array $options)setMultiOptions(array $options) (overwrites existing
options)getMultiOption($option)getMultiOptions()removeMultiOption($option)clearMultiOptions() Para marcar los valores confirmados, se necesita pasar un array de valores a
setValue(). El siguiente código verificará los valores
"bar" y "bat": array(
'foo' => 'Foo Option',
'bar' => 'Bar Option',
'baz' => 'Baz Option',
'bat' => 'Bat Option',
);
));
$element->setValue(array('bar', 'bat'));
]]> Note que cuando se determina un asimple variable, se debe pasar un array. Zend_Form_Element_Multiselect XHTML selector de elementos permite 'multiple' atributos,
indicando multiples opciones pueden ser seleccionados por submision, en vez de lo usual.
Zend_Form_Element_Multiselect extiende Zend_Form_Element_Select, y
define los atributos multiple a 'multiple'. Como las otras
clases que heredan de la clase base Zend_Form_Element_Multi, se
puede manipular las opciones del selector usando: addMultiOption($option, $value)addMultiOptions(array $options)setMultiOptions(array $options) (overwrites existing
options)getMultiOption($option)getMultiOptions()removeMultiOption($option)clearMultiOptions() Si un adaptador de tranducción es registrado con el formulario y/o elemnto, la opción
valores será traducido para propósito de despliegue. Por defecto, este elemento registra un validador InArray el
cual valida contra el array de llaves de opciones registradas. se puede deshabilitar
esta caracteristica llamando a
setRegisterInArrayValidator(false), o pasando un valor
falso a la configuracion de llaves registerInArrayValidator.
Zend_Form_Element_Password Elementos contraseña son basicamente elementos de texto -- excepto que tipicamente no
se quiera desplegar la contraseña en los mensajes de error o del elemnto en si cuando el
formulario es re desplegado. Zend_Form_Element_Password archiva esto llamando
setObscureValue(true) en cada validador (asegurando que la
contraseña este oculta en mensajes de validación de errores), y usando la vista ayuda
'formPassword' (el cual no desplega el valor pasado). Zend_Form_Element_Radio elementos de Radio permite especificar muchas opciones, de los cuales se necesita
retornar un solo valor. Zend_Form_Element_Radio extiende la clase
base Zend_Form_Element_Multi, permitiendonos especificar un
numero de opciones, y luego usa la vista ayuda formRadio para
desplegar. Por defecto, este elemento registra un validador InArray el
cual valida contra el array de llaves de opciones registradas. se puede deshabilitar
esta caracteristica llamando a
setRegisterInArrayValidator(false), o pasando un valor
falso a la configuracion de llaves registerInArrayValidator.
configuration key. Como todos los elementos se extienden del elemento clase base Multi, los siguientes
métodos pueden ser usados para manipular las opciones de radio desplegadas: addMultiOption($option, $value)addMultiOptions(array $options)setMultiOptions(array $options) (overwrites existing
options)getMultiOption($option)getMultiOptions()removeMultiOption($option)clearMultiOptions()Zend_Form_Element_Reset Botones Reset son tipicamente usados para limpiar un formulario, y no son parte de la
información sometida. Como sea, como ellos sirven como propósito en el despliegue, son
incluidos en los elementos estándar. Zend_Form_Element_Reset extends Zend_Form_Element_Submit. Tal
cual, la etiqueta es usada para desplegar el botón y será traducido si el adaptador
traducción esta presente. Se utiliza sólo los decoradores 'ViewHelper' y 'DtDdWrapper',
nunca debería existir mensajes de error para tales elementos, no se necesitará una
etiqueta. Zend_Form_Element_Select Cajas selectoras son una manera común de limitar espeficias opciones para un dado
formulario datum. Zend_Form_Element_Select le permite generar
esto rápido y fácil. Por defecto, este elemento registra un validador InArray el
cual valida contra el array de llaves de opciones registradas. se puede deshabilitar
esta caracteristica llamando a
setRegisterInArrayValidator(false), o pasando un valor
falso a la configuracion de llaves registerInArrayValidator.
configuration key. Como se extiende el elemento base Multi, los siguientes métodos pueden ser usados
para manipular las opciones seleccionadas: addMultiOption($option, $value)addMultiOptions(array $options)setMultiOptions(array $options) (overwrites existing
options)getMultiOption($option)getMultiOptions()removeMultiOption($option)clearMultiOptions()Zend_Form_Element_Select usa la vista ayuda 'formSelect' para
decoración. Zend_Form_Element_Submit Submit buttons are used to submit a form. You may use multiple submit buttons; you
can use the button used to submit the form to decide what action to take with the data
submitted. Zend_Form_Element_Submit makes this decisioning easy,
by adding a isChecked() method; as only one button element will
be submitted by the form, after populating or validating the form, you can call this
method on each submit button to determine which one was used. Zend_Form_Element_Submit usa la etiqueta como el "valor" del
botón sometido, traduciendolo si el adaptador traducción esta presente.
isChecked() verifica el valor sometido contra la etiqueta
en orden to determinar si el botón ha sido usado. El ViewHelper y DtDdWrapper decoradores
generan al elemento. no decorador de etiquetas es usado, como el botón etiqueta es usado
cuando se generan los elementos; asi tipicamente, no se asociarán errores con el elemnto
sometido. Zend_Form_Element_Text Lejos el mas prevaleciente tipo de formulario es el elemento texto, permitido para
entrada de texto limitado; es un elemento ideal para la entrada de la información.
Zend_Form_Element_Text simplemente usa la vista ayuda
'formText' para desplegar el elemento. Zend_Form_Element_Textarea Textareas son usadas cuando se espera una larga cantidad de texto y no limites en la
cantidad de texto sometido ( otro que el máximo tamaño tomado por su servidor or
PHP). Zend_Form_Element_Textarea usa la
vista ayuda 'textArea' para desplegar tales elementos, ocupando el valor como el
contendio del elemento.