#1 jake

通常在开发中,我们会遇到多个需要验证的数据处理,而这些数据处理都是目的不一样的,那么我们就需要切换不同的验证规则来验证这些数据。

最明显的例子是用户系统中,注册和登录的两个表单,都是需要验证规则,而且它们不尽相同。下面我们以注册和登录两个表单的验证规则来介绍如何进行多个验证规则的切换。

class m_user extends spModel
{
        public $pk = 'uid';
        public $table = 'user';

        // 这个是注册的验证规则
        var $verifier_register = array(
                "rules" => array( // 规则
                        'username' => array(
                                'notnull' => TRUE,
                                'minlength' => 3,
                                'maxlength' => 15,
                        ),
                        'password' => array(  
                                'notnull' => TRUE,
                                'minlength' => 6,
                                'maxlength' => 30,
                        ),
                        'compassword' => array(
                                'equalto' => 'password',
                        ),
                        'email' => array(  
                                'notnull' => TRUE,
                                'email' => TRUE,  
                                'minlength' => 6,
                                'maxlength' => 30,
                        ),
                ),
                "messages" => array( // 提示消息,从上面的rules复制下来,很快捷。
                        'username' => array(  
                                'notnull' => "用户名不能为空",
                                'minlength' => "用户名长度不能少于3个字符",  
                                'maxlength' => "用户名长度不能大于15个字符",
                        ),
                        'password' => array(  
                                'notnull' => "密码不能为空",
                                'minlength' => "密码长度不能少于6个字符",  
                                'maxlength' => "密码长度不能大于30个字符",
                        ),
                        'compassword' => array(
                                'equalto' => '两次输入的密码不一样',
                        ),
                        'email' => array(   
                                'notnull' => "电子邮件不能为空",
                                'email' => "电子邮件格式不正确",  
                                'minlength' => "电子邮件长度不能少于6个字符",  
                                'maxlength' => "电子邮件长度不能大于30个字符",
                        ),
                ),
        );
        // 这是登录的验证
        var $verifier_login = array(
                "rules" => array(
                        'username' => array(
                                'notnull' => TRUE,
                                'minlength' => 3,
                                'maxlength' => 15,
                        ),
                        'password' => array(
                                'notnull' => TRUE,
                                'minlength' => 6,  
                                'maxlength' => 30,
                        ),
                ),
                "messages" => array( // 提示消息,从上面的rules复制下来,很快捷。
                        'username' => array(  
                                'notnull' => "用户名不能为空",
                                'minlength' => "用户名长度不能少于3个字符",  
                                'maxlength' => "用户名长度不能大于15个字符",
                        ),
                        'password' => array(  
                                'notnull' => "密码不能为空",
                                'minlength' => "密码长度不能少于6个字符",  
                                'maxlength' => "密码长度不能大于30个字符",
                        ),
                ),
        );
}
?>
上面$verifier_register和$verifier_login分别代表了注册和登录所使用的验证。然后我们看看在控制器中的使用
// 在登录的时候
$userobj = spClass('m_user');
$userobj->verifier = $userobj->verifier_login; // 切换验证规则
if( false == $userobj->spVerifier($this->spArgs()) ){
        // 开始验证
}

// 在注册的时候
$userobj = spClass('m_user');
$userobj->verifier = $userobj->verifier_register; // 切换验证规则
if( false == $userobj->spVerifier($this->spArgs()) ){
        // 开始验证
}       

以上登录和注册两个验证规则,看起来几乎是一样,只是注册的规则要比登录的多,那么我们能否把注册的规则用到登录上面去呢?

答案是不能,因为注册规则里面,比登录规则多的两个规则(重复密码compassword和邮箱email)都是notnull(非空),所以不能共用。


2012-08-04 16:52:02