Here is some extended core , helping to auto validate Zend Framework 2 Form.
Step 1.
Extending Zend Framework 2 Form.
__addValidator(); if ($request -> isPost()) { $query = $request -> getQuery(); $query = is_object($query) ? $query->toArray() : $query; $post = $request -> getPost(); foreach($post as $var=>$value){ $query[$var] = $value; } $this -> setData($query); return parent::isValid(); } else { return false; } } public function add($elementOrFieldset, array $flags = array()) { $form = parent::add($elementOrFieldset, $flags); $this->_rawElements[] = $elementOrFieldset; return $form; } private function __addValidator() { $this -> setInputFilter(new ExtendedFormValidator($this->_rawElements)); } }
Step 2.
Creating Zend Framework 2 Form Validator
//File : App_folder/module/Module_name/src/Module_name/Form/ExtendedFormValidator.php namespace Application\Form; use Zend\InputFilter\InputFilter; class ExtendedFormValidator extends InputFilter { public function __construct($elements) { foreach ($elements as $element) { if (is_array($element)) { if (isset($element['type'])) { unset($element['type']); } $this -> add($element); } } } }
Step 3.
Creating simple Zend Framework 2 Form and extending it with ExtendedForm
//File : App_folder/module/Module_name/src/Module_name/Form/ResendPassword.php namespace Application\Form; class ResendPassword extends ExtendedForm { public function __construct($name = null) { parent::__construct('login'); $this->setAttribute('method', 'post'); $this->add(array( 'required'=>true, 'name' => 'usermail', 'type' => 'Zend\Form\Element\Text', 'options' => array( 'label' => 'Email', ), 'filters'=>array( array('name'=>'StripTags'), array('name'=>'StringTrim'), ), 'validators'=>array( array('name'=>'EmailAddress') ), )); $this->add(array( 'name' => 'submit', 'type' => 'Zend\Form\Element\Text', 'attributes' => array( 'type' => 'submit', 'value' => 'Submit', 'id' => 'submitbutton', ), )); } }
Step 4.
Instantiating the Zend Framework 2 Form.
//File : App_folder/module/Module_name/src/Module_name/Controller/IndexController.php use Application\Form as Form; //at the top of the file. public function forgotAction(){ $form = new Form\ResendPassword(); if($form->isValid($this->getRequest())){ //do your magic } return new ViewModel(array('form'=>$form)); }
Step 5.
Rendering Zend Framework 2 Form in the View.
//File : App_folder/module/Module_name/View/Module_name/index/index.phtml $form = $this->form; $form->prepare(); echo $this->view->form()->openTag($form) . PHP_EOL; $elements = $form->getElements(); foreach($elements as $element){ echo $this->view->formRow($element) . PHP_EOL; } echo $this->view->form()->closeTag($form) . PHP_EOL;
Suggestions or problems ?
Write a comment.