博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Yii中validator之scenario
阅读量:4505 次
发布时间:2019-06-08

本文共 1811 字,大约阅读时间需要 6 分钟。

  Yii中有个场景的概念,我们用到场景的地方主要是在model中定义rules规则的时候,可以对不同的场景使用不同的校验规则,所以,自然而然会认为所谓的场景就是对应的action的名字。其实场景和action的名字是不同的概念来的,不能混为一谈。scenario则是M的一种属性,理论上,scenario是独立于action概念的,可以在没有action的场合下使用scenario。model的scenario是通过设置它的scenario属性设置的,它和使用model的action没有任何关系。

比如:

$model=new User;

$model->scenario = 'create';

$model=new User('create');

都是设置了执行一个action的时候对model进行校验的场景

public function rules()	{		// NOTE: you should only define rules for those attributes that		// will receive user inputs.		return array(			array('username, email', 'required'),			array('password, confirm_password', 'required', 'on'=>'create'),			array('username', 'unique'),			array('username, email', 'length', 'max'=>50),			array('password, confirm_password', 'length', 'min'=>6, 'max'=>32),			array('email', 'email'),			array('confirm_password', 'compare', 'compareAttribute'=>'password', 'on'=>'create,update')           );	}

上面的校验规则说明了初始密码和确认密码在create场景中是required的,和密码确认的compare是在create和update场景中都必须校验的。主要在action中对默认制定了对应的场景属性,在提交表单做校验的时候就能达到rules中定义的规则了。

 

下面是引用yii官方论坛帖子中牛人关于场景的解释:

场景的概念来自 用例驱动的方法学

用银行操作来说 存款 取款 转账 就是用例(关于用例的概念自己查阅相关资料或者google 简单点说就是里程碑式的操作 是系统级的方法
可以认为是应用级别的事务) 在面向对象中 模型层的东西会参加多个用例(一个对象有若干个方法 并不是所有方法在一次操作中都被用到
某个用例操作中只会用到一个或几个) 你可以这样认为用例等价场景 还有就是一个用例中可能不止一个模型参与其中
对AR来说 其中的若干属性只会参与一个用例(插入insert 更新update 或者搜索search) 在某种高度对象的方法和属性是一个级别概念 所以某些属性/方法 可以用用例来归组 经常在一起使用的方法或属性可以归为一个用例(场景)之中
用例可以自己定义 根据应用特征  比如User 这个模型类 在登陆操作(场景/用例/应用事务)中只会用到用户名和密码
所有这两个组合可以归为一个场景 其他属性根据业务可以自定义归组 ;  在拿改密码来说你可能需要用户输入旧密码 和新密码
那么这两个就会归属同一个用例(可以随意起名 比如changePassword等)
场景名不是yii定死的 但insert update 和search 是默认的(惯例而已) 在actionCreate actionUpdate
actionAdmin中出现的$model 默认的scenario 就分别是insert,update,search 你可以打印出来
echo $model->scenario ;die(); //在render 之前 试着调试输出;

地址:

看了这个解释肯定是豁然开朗了!

 

转载于:https://www.cnblogs.com/springdong/archive/2013/05/05/3060457.html

你可能感兴趣的文章
机会是留给有准备的人
查看>>
实战是最好的学习方式
查看>>
使用qemu-img创建虚拟磁盘文件
查看>>
JDBC
查看>>
POJ - 3237 Tree (树链剖分+线段树)
查看>>
个人网站可参考的资料
查看>>
跟随一条insert语句, 进入TiDB的源码世界(上)
查看>>
软件工程-设计
查看>>
乘法游戏
查看>>
JavaScript返回上一页并自动刷新
查看>>
Linux相关——关于文件调用
查看>>
判断链表是否有环
查看>>
我的第一个python web开发框架(7)——本地部署前端访问服务器
查看>>
python_模块
查看>>
悲观锁乐观锁实战
查看>>
Android平台签名证书(.keystore)生成指南
查看>>
WeX5 苹果APP打包教程
查看>>
机器学习笔记 - 入门
查看>>
使用咕咕机打印有道词典中的单词
查看>>
你迷茫吗?
查看>>