A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

场景是一个分离所有CModel派生类验证任务的非常有用的工具,在这里我们将使用 CActiveRecord。
指定场景
首先要做的是初始化一个带有场景的模型(Model).我们有两种方法来实现它。
1. 新的 CActiveRecord 使用构造函数的参数方式$model = new MyActiveRecord('formSubmit');
在例子中 MyActiveRecord 继承 CactiveRecord ,'fromSumbit' 是一个验证场景。
2. 已经存在的 CActiveRecord$model = MyActiveRecord::model()->find('id = :id', array(':id' => 1); $model->scenario = 'formSubmit';
这个例子是我们将现有的模型切换到一个场景。
创建场景的具体验证规则
首先需要注意的时所有未被指定场景的验证规则将会使用到所有场景中。这将会对创建一系列不使用继承的验证规则时非常有用。当在模型中设置了验证规则的属性表示它们时安全的(safe),除非它们在 'unsafe' 规则中被指定。 进一步了解:
Reference: Model rules validation
Understanding "Safe" Validation Rules
场景验证规则的例子:public function rules() { return array( array('name', 'required'), array( 'name', 'match', 'not' => true, 'pattern' => '/[^a-zA-Z0-9 ]/', 'message' => 'name 必须由字母、数字或空格组成', 'on' => 'formSubmit' ), ); }
注意将规则指定到场景使用 ‘on’,就像例子中的一样,如果没有指定场景只有规则 name 不能为空起作用,如果设置了场景 'fromSubmit' 则两个规则都将起作用。 其他例子:
$model->scenario = 'formSubmit'; $model->name = 'Joe Blogs'; if ($model->validate()) { //通过所有验证 } $model->scenario = 'formSubmit'; $model->name = 'Joe Blogs - is awesome!!!!'; if ($model->validate()) { //不通过场景 ‘fromSumbit’ 的验证 } $model->scenario = null; $model->name = 'Joe Blogs - is awesome!!!!'; if ($model->validate()) { //通过验证,没有指定场景所以不会验证指定场景的验证规则 } $model->scenario = 'formSubmit'; $model->name = null; if ($model->validate()) { //不通过验证,原因是没有通过未指定场景的验证规则 }
小结
现在你可以对用户的输入进行层叠验证或独立验证。这样就可以在业务逻辑上给用户更加严格的规则。

1 个回复

倒序浏览
奈斯
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马