Yii中validator之scenario 场景

Yii中validator之scenario

  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进行校验的场景

?
<span style= "font-size: 14px;" > 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' )</span><br><span style= "font-size: 14px;" >          );
     }
</span>

上面的校验规则说明了初始密码和确认密码在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 之前 试着调试输出;

地址:http://www.yiiframework.com/forum/index.php/topic/34947-%E5%AF%B9%E5%9C%BA%E6%99%AF%E7%9A%84%E6%A6%82%E5%BF%B5%E8%BF%98%E6%98%AF%E4%B8%8D%E6%98%8E%E7%99%BD%EF%BC%8C%E8%AF%B7%E9%AB%98%E6%89%8B%E8%A7%A3%E6%9E%90%E4%B8%80%E4%BA%8C/

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值