PHP YII框架开发小技巧之模型(models)中rules自定义验
在Yii框架中,模型的rules部分扮演着极其重要的角色,它为表单验证提供了关键的规则。这些规则不仅确保了数据的准确性,还保障了表单的安全性。在相应的视图(views)中添加表单后,提交之前,程序会自动按照这些规则进行验证,只有通过了验证的数据才能成功提交。这样的机制,大大提高了数据的有效性和安全性。
下面是一个简单的视图(views)部分的代码示例:
```php
$form = $this->beginWidget('CActiveForm', array(
'id' => 'tag-form',
'enableAjaxValidation' => false,
));
?>
labelEx($model,'tagname'); ?>
textField($model,'tagname',array('size'=>20,'maxlength'=>32)); ?>
labelEx($model,'tagtype'); ?>
radioButtonList($model,'tagtype',array(1=>"普通TAG",2=>"系统默认TAG"),array('separator'=>'','labelOptions'=>array('class'=>'tagtypelabel'))); ?>
errorSummary($model); ?>
endWidget(); ?>
```
与之对应的模型(models)中的rules部分代码如下:
```php
public function rules()
{
return array(
array('tagname, tagtype', 'required'), // 验证标签名和标签类型是否必填
array('tagtype', 'numerical', 'integerOnly'=>true), // 验证标签类型是否为数字
array('tagname', 'length', 'max'=>32), // 验证标签名的最大长度
array('tagname', 'match', 'pattern'=>'/^[\x{4e00}-\x{9fa5}A-Za-z0-9]+$/u', 'message'=>'标签不合法,必须为汉字、字母或者数字!'); // 验证标签名是否合法,只允许汉字、字母和数字
}
```
Yii框架中的自定义验证规则
在Yii框架中,验证规则是确保数据模型完整性和准确性的关键部分。系统已经提供了一系列的默认验证规则,如布尔值验证、验证码验证、比较验证、电子邮件验证、默认值验证、存在验证、文件验证、过滤器验证、范围验证、长度验证、匹配验证、数字验证、必填验证、类型验证、唯一性验证和URL验证等。这些规则足以应对大多数常见的数据验证需求。
自定义验证规则的过程相对简单,主要分为两个关键步骤:
第一步,在模型的rules()方法中添加自定义验证规则。例如,我们可以添加如下代码来检查TAG名是否已存在:
```php
array('tagname', 'checktagname', 'on' => 'create,update'), // 在创建和更新时检查TAG名是否已存在
```
第二步,在模型中定义checktagname()验证函数。这个函数将执行实际的验证逻辑。例如:
```php
public function checktagname($attribute, $params) {
$oldTag = Tag::model()->findByAttributes(array('tagname' => $this->tagname));
if ($oldTag->tagid > 0) {
$this->addError($attribute, '该TAG已经存在!');
}
}
```
在这个函数中,我们首先通过查找已存在的标签来检查新的标签名是否已存在。如果标签已存在(即$oldTag->tagid > 0),我们就通过addError()方法添加一个错误,提示用户该标签已存在。
需要注意的是,自定义验证函数的参数必须是($attribute, $params),并且需要在视图中有相应的错误提示信息,以便用户了解出错原因。
用户密码安全性的验证
在保障用户数据安全的过程中,密码的安全性是至关重要的一环。通常我们会使用各种方法来验证用户密码的强度。虽然CRegularExpression方法是一种常用的验证方式,但在此指南中,我们假设没有这种方法。
在模型中定义两个常量,以标识密码强度的等级。一个是WEAK,代表弱密码,另一个是STRONG,代表强密码。这两个常量的定义为模型提供了明确的密码强度标准。
接下来,在模型的rules方法中设置验证规则。这里我们定义了一个名为'passwordStrength'的验证规则,用于检查用户密码是否达到设定的强度。
现在让我们深入了解这个'passwordStrength'验证器的实现细节。这个验证器的主要任务是检查用户密码是否足够强大。根据设定的强度参数,它会按照特定的模式对密码进行检查。如果密码不符合模式要求,将会报错并提示用户密码不够强大。
这个方法的实现需要两个参数:$attribute表示需要验证的属性,$params表示在规则中自定义的参数。在我们的例子中,验证的属性是password,自定义的参数是strength,代表密码的强度要求。
在方法中,我们使用了CModel::addError()来添加错误。这个方法接受两个参数:第一个参数是在表单中显示错误的属性名,第二个参数是显示的错误信息。这样,如果密码不符合要求,用户会收到一个明确的错误提示。
为了让这个验证规则可以在多个模型中使用,最好的方式是继承CValidator类。这样,我们可以使用像CActiveForm::$enableClientValidation这样的功能,提供更加强大和灵活的验证能力。
为了使用这个验证规则,我们需要创建类文件。最好的做法是让类的文件名和类名相同,这样可以利用Yii的延迟加载功能。这个验证类的创建,使得密码强度的验证变得简单和统一,提高了应用程序的安全性和可维护性。
保障用户密码的安全性是应用开发中的重要任务。通过创建自定义的验证规则,我们可以确保用户设置的密码符合强度要求,从而提高应用程序的安全性。在应用的扩展目录下,我们创建了一个新的文件夹,它被放置在 protected 文件夹之下,名为“MyValidators”。在这个新目录中,我们创建了一个名为 passwordStrength.php 的文件,旨在定义我们的密码强度验证方法。
我们定义了一个名为 passwordStrength 的类,它继承了 CValidator 类。在类中,我们定义了一个属性 $strength,用于存储验证规则中的参数。CValidator 会自动根据这些参数来填充这些属性。
除此之外,我们还定义了两个属性,它们是用于 preg_match 函数的正则表达式。这两个正则表达式分别代表弱密码模式和强密码模式,用于检测密码的强度。
在 validateAttribute 方法中,我们首先检查验证规则中使用的 strength 参数。如果 strength 参数为 'weak',则使用弱密码模式;如果为 'strong',则使用强密码模式。然后,我们从模型对象中提取属性的值。如果属性的值不符合我们设定的密码模式,我们就通过 addError 方法添加一条错误消息,提示用户“您的密码太薄弱了!”
这个验证方法非常实用,可以帮助我们确保用户设置的密码达到足够的强度。在实际应用中,我们还可以根据需求对密码规则进行更多的自定义。我推荐在 if 条件中使用常量,这样可以提高代码的可读性和可维护性。
我们调用 cambrian.render('body') 来呈现页面的主体部分。这样,我们的密码强度验证功能就可以在实际应用中发挥作用了。
平面设计师
- PHP YII框架开发小技巧之模型(models)中rules自定义验
- PHP异步进程助手async-helper
- 如何改进javascript代码的性能
- Vuejs第一篇之入门教程详解(单向绑定、双向绑定
- js实现简易聊天对话框
- PHP使用XMLWriter读写xml文件操作详解
- Node.js事件循环(Event Loop)和线程池详解
- JS区分Object与Aarry的六种方法总结
- 详解nodejs微信jssdk后端接口
- 20个必会的JavaScript面试题(小结)
- js兼容pc端浏览器并有多种弹出小提示的手机端浮
- 基于Vue制作组织架构树组件
- 微信小程序实现MUI数字输入框效果
- js实现简洁大方的二级下拉菜单效果代码
- php英文单词统计器
- PHP调用ffmpeg对视频截图并拼接脚本