您好,UncleToo欢迎您!  为了更好的浏览本站,请使用高版本浏览器
RSS  Tag     设为首页 | 加入收藏
 您所在的位置:首页 > PHP框架 > ZendFramework

基于Zend Framework2 Forms的表单自动验证

作者:UncleToo  来源:原创  日期:2014-03-18 7:51:59
收藏  评论:( 0 )  阅读:1234

本文UncleToo给大家分享在Zend Framework2中如何实现表单自动验证的功能。


1、打开Zend Framework2 表单扩展

文件及路径:App_folder/module/Module_name/src/Module_name/Form/ExtendedForm.php

<?php
namespace Application\Form;
use Zend\Form\Form;
class ExtendedForm extends Form {
    protected $_name;
    protected $_rawElements = array();
    public function __construct($name = null) {
        parent::__construct($name);
    }
    public function isValid($request = null) {
        $this->__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));
    }
}
?>


2、创建Zend Framework2表单验证

文件及路径: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);
            }
        }
    }
}


3、创建简单的Zend Framework2表单类,并继承ExtendedForm类

文件及路径: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',
            ),
        ));
    }
}


4、实例化上一步创建的表单类

文件及路径:App_folder/module/Module_name/src/Module_name/Controller/IndexController.php

use Application\Form as Form; //放在文件首行
public function forgotAction(){
    $form = new Form\ResendPassword();
    if($form->isValid($this->getRequest())){
          //do your magic
    }
    return new ViewModel(array('form'=>$form)); 
}


5、在视图中渲染表单

文件及路径: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;




除非特别声明,本站所有PHP教程及其他教程/文章均为原创、翻译或网友投稿,版权均归UncleToo中文网所有, 转载请注明作者及出处。
原文网址:http://www.uncletoo.com/html/zend/856.html
读完这篇文章后,你是否有所收获? 分享是一种生活的信念!
  • 0
  • 0
我来说两句
更多>>网友评论
UncleToo,一档有态度的PHP中文网

图片教程