Zend Forms … what can you do with it?
The general structure of a Zend_Form class is :
class my_form extends Zend_Form
{
protected $_originalData; //holds the data used to populate the form.
/**
* setOriginalData is automatically used by the
* constructor when invoked with the argument...
* (array('originalData' => $array_of_data));
*/
public function setOriginalData(array $original_data)
{
$this->_originalData = $original_data;
return $this;
}
public function init()
{
if (empty($this->_originalData)) {
throw new Zend_Form_Exception("originalData must be set during construction.");
}
$this->setName('MapLocationForm')
->setAttrib('enctype', 'multipart/form-data');
// initialize form
$this->setMethod('post');
// --------------- csrf handling --------------------------
$this->addElement(new Zend_Form_Element_Hash('csrf',
array('salt' => $this->getName(),
'timeout' => 1800)));
$this->getElement('csrf')
->getValidator('Identical')
->setMessage('There was a problem with your form submission, please try again.');
// ---------------------------------------------------------
$street = new Zend_Form_Element_Text('map_street');
$street ->setOptions(array('size' => '40', 'maxlength' => '60'))
->setRequired(false)
->addFilter('StringTrim')
->setLabel("Street address");
$city = new Zend_Form_Element_Text('map_city');
$city ->setOptions(array('size' => '40', 'maxlength' => '40'))
->setRequired(false)
->addFilter('StringTrim')
->setLabel("City");
$submit = new Zend_Form_Element_Submit('submit');
$submit ->setOptions(array('ignore' => true))
->setAttrib('class','bp') // add a class of 'bp' to the input element
->setLabel('Save');
$cancel = new Zend_Form_Element_Button('cancel');
$cancel ->setOptions(array('ignore' => true))
// add a class of 'bs' to the button element
->setAttrib('class','bs')
// suppress the ability to 'tab' to the cancel button
->setAttrib('tabindex','-1')
->setLabel('Cancel and exit to other.php')
->setAttrib('onclick', "window.location.href='/other.php';return false");
// setup the form elements
$this->addElement($street)
->addElement($city)
->addElement($submit)
->addElement($cancel);
// add data to the form...
$this->populate($this->_originalData);
}
}
The point of this blog is to highlight the things you can do with a form element all in one place (i.e. here).
->setLabel("Element Label")
->setRequired(true|false)
->setAtrtrib('class','<class_name>') // associate a class name with the element
->setAttrib('tabindex','-1') // suppress tabbing to this element
->setOptions(array('size' => '20,'
'maxlength' => '40') // for text elements
->setOptions(array('rows' => '2',
'cols' => '30',
'maxlength' => 200,
'style' => 'width:100%')) // for textarea elements
->addDecorator('HtmlTag', array('tag'=>'div',
'class'=>'input-wrapper'))
->addValidator('NotEmpty',
true,
array('messages'=> "Please enter a value, it's reqired."))
->addValidator('regex',
true,
array(NUMBER_6DECIMAL,
'messages'=> "Please enter a number with up to 6 decimals."))
->addValidator('between',
true,
array('min' => -90,
'max' => 90,
'messages'=> Please enter a Latitude between -90 and 90."));
->addValidator('Int',
true,
array('messages' => "zip code must be all numeric."))
->addValidator('StringLength',
true,
array(3, 5, 'messages'=>"value must be 3 to 5 characters long."));
->addValidator('StringLength',
true,
array(5, 5, 'messages'=>"zip code must be 5 digits."));
NOTE: NUMBER_6DECIMAL = /^-?[0-9]*(\.[0-9]{1,6})?$/