[ 'class' => 'Zend_Form_Element_Text', 'attrs' => [ 'class' => self::TEXT_INPUT_CLASS, ], 'validators' => [ [ 'class' => 'Zend_Validate_Date', 'params' => [ 'format' => self::VALIDATE_DATE_FORMAT, ], ], ], 'filters' => [ 'StringTrim', ], ], TEMPLATE_TIME => [ 'class' => 'Zend_Form_Element_Text', 'attrs' => [ 'class' => self::TEXT_INPUT_CLASS, ], 'validators' => [ [ 'class' => 'Zend_Validate_Date', 'params' => [ 'format' => self::VALIDATE_TIME_FORMAT, ], ], ], 'filters' => [ 'StringTrim', ], ], TEMPLATE_DATETIME => [ 'class' => 'Zend_Form_Element_Text', 'attrs' => [ 'class' => self::TEXT_INPUT_CLASS, ], 'validators' => [ [ 'class' => 'Zend_Validate_Date', 'params' => [ 'format' => self::VALIDATE_DATETIME_FORMAT, ], ], ], 'filters' => [ 'StringTrim', ], ], TEMPLATE_STRING => [ 'class' => 'Zend_Form_Element_Text', 'attrs' => [ 'class' => self::TEXT_INPUT_CLASS, ], 'filters' => [ 'StringTrim', ], ], TEMPLATE_BOOLEAN => [ 'class' => 'Zend_Form_Element_Checkbox', 'validators' => [ [ 'class' => 'Zend_Validate_InArray', 'options' => [ 'haystack' => [0, 1], ], ], ], ], TEMPLATE_INT => [ 'class' => 'Zend_Form_Element_Text', 'validators' => [ [ 'class' => 'Zend_Validate_Int', ], ], 'attrs' => [ 'class' => self::TEXT_INPUT_CLASS, ], ], TEMPLATE_FLOAT => [ 'class' => 'Zend_Form_Element_Text', 'attrs' => [ 'class' => self::TEXT_INPUT_CLASS, ], 'validators' => [ [ 'class' => 'Zend_Validate_Float', ], ], ], ]; public function init() { $history_id = new Zend_Form_Element_Hidden($this::ID_PREFIX . 'id'); $history_id->setValidators([ new Zend_Validate_Int(), ]); $history_id->setDecorators(['ViewHelper']); $this->addElement($history_id); $dynamic_attrs = new Zend_Form_SubForm(); $this->addSubForm($dynamic_attrs, $this::ID_PREFIX . 'template'); // Add the submit button $this->addElement('button', $this::ID_PREFIX . 'save', [ 'ignore' => true, 'class' => 'btn ' . $this::ID_PREFIX . 'save', 'label' => _('Save'), 'decorators' => [ 'ViewHelper', ], ]); // Add the cancel button $this->addElement('button', $this::ID_PREFIX . 'cancel', [ 'ignore' => true, 'class' => 'btn ' . $this::ID_PREFIX . 'cancel', 'label' => _('Cancel'), 'decorators' => [ 'ViewHelper', ], ]); } public function createFromTemplate($template, $required) { $templateSubForm = $this->getSubForm($this::ID_PREFIX . 'template'); for ($i = 0, $len = count($template); $i < $len; ++$i) { $item = $template[$i]; // don't dynamically add this as it should be included in the // init() function already if it should show up in the UI.. if (in_array($item['name'], $required)) { continue; } $formElType = $this->formElTypes[$item[self::ITEM_TYPE]]; $label = $item[self::ITEM_ID_SUFFIX]; $id = $this::ID_PREFIX . $label; $el = new $formElType[self::ITEM_CLASS]($id); $el->setLabel($item['label']); if (isset($formElType['attrs'])) { $attrs = $formElType['attrs']; foreach ($attrs as $key => $value) { $el->setAttrib($key, $value); } } if (isset($formElType['filters'])) { $filters = $formElType['filters']; foreach ($filters as $filter) { $el->addFilter($filter); } } if (isset($formElType['validators'])) { $validators = $formElType['validators']; foreach ($validators as $index => $arr) { $options = isset($arr[self::ITEM_OPTIONS]) ? $arr[self::ITEM_OPTIONS] : null; $validator = new $arr[self::ITEM_CLASS]($options); // extra validator info if (isset($arr['params'])) { foreach ($arr['params'] as $key => $value) { $method = 'set' . ucfirst($key); $validator->{$method}($value); } } $el->addValidator($validator); } } $el->setDecorators(['ViewHelper']); $templateSubForm->addElement($el); } } }