先上代码

class User extends CActiveRecord
{
    public function rules()
    {
        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'),
            array('id, username, password, email', 'safe', 'on'=>'search'),
        );
    }
}

该方法是在模型(activeRecord、FormModel)中重写了CModel的rules方法, 其中on对应的值就是场景,如果on 选项未设置,则此规则会应用于所有场景。

也就是说该rules有3个场景:create, update, search。

定义好场景后我们可以在控制器的action中调用刚才定义好的场景

public function actionAdmin()
{
    $model=new User('create');
}

当我们调用CModel::validate() 或者CModel::save()的时, 系统就会验证email的格式是否正确,

confirm_password、password的值是否为空以及他们是否相等, 以及其他的验证

如果此文中有不对或不足的地方, 请大家多多指教

Yii的场景的更多相关文章

  1. yii 定义场景

    定义场景可以限制对字段的增删改查操作

  2. yii框架场景的用法

    1.在 model 里面定义一下场景 类名必须是 scenarios() public function scenarios() { return [ 'create' => ['title', ...

  3. YII场景

    YII在模型中定义场景后 public function scenarios(){//场景 return [ 'sco1'=>['aid','uphone'], 'sco2'=>['aid ...

  4. 为speedphp最新版添加 仿Yii 的简易版 数据验证 支持不同场景,自定义回调

    给个意见或建议吧 扩展一个Model基类 <?php class BaseModel extends Model{ use ValidationRules; public function ru ...

  5. yii事件

    控制器: public function actionTests1(){ $c = new \app\components\cat(); $m = new \app\components\mou; $ ...

  6. Yii的学习(4)--Active Record

    摘自Yii官网:http://www.yiiframework.com/doc/guide/1.1/zh_cn/database.ar 在官网原文的基础上添加了CDbCriteria的详细用法. 虽然 ...

  7. Yii的学习(2)--数据访问对象 (DAO)

    摘自Yii官网:http://www.yiiframework.com/doc/guide/1.1/zh_cn/database.dao Yii提供了强大的数据库编程支持.Yii数据访问对象(DAO) ...

  8. 在yii中使用多个数据库

    背景: 对于一个大公司拥有多个分公司的应用场景下,我们通常需要配置多个sub-database(子数据库)来存储不同的数据纪录. 配置步骤: 1.在application骨架里面的主配置文件main. ...

  9. Yii2学习笔记之场景

    场景 一个模型可能在多个场景中使用,在不同的场景中,模型可能使用不同的业务逻辑和规则.例如, User 模型可能在用户登录时使用,也可能在用户注册时使用,某些属性可能在用户注册时强制要求有,在用户登录 ...

随机推荐

  1. SAR数据下载网站

    1] http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.144.2153&rep=rep1&type=pdf[2] ht ...

  2. JqueryeasyUI选项卡选择判定更改内部Iframe地址

    1.tabs的常用操作 //1.判断tab是否存在. var currtab = $('#tabs').tabs('getSelected'); //2.判断点击的tab是否是当前选中的tab. va ...

  3. 在PHP中处理表单之—Checkbox

    原文翻译自:http://www.html-form-guide.com/php-form/php-form-checkbox.html 单个checkbox  形如: <form action ...

  4. 创建渐进式jpeg图片

    <?php // Create an image instance $im = imagecreatefromjpeg('test.jpg');   // Enable interlancing ...

  5. cf公式专场-续

    Benches Time Limit:500MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submit Statu ...

  6. POJ 3468 A Simple Problem with Integers(线段树区间求和)

    Description You have N integers, A1, A2, ... , AN. You need to deal with two kinds of operations. On ...

  7. 自动工作负载库(Automatic Workload Repository,AWR)

    自动工作负载库(Automatic Workload Repository,AWR)AWR的由来:    10g之前的oracle:用户的连接将产生会话,当前会话记录保存在v$session中:处于等 ...

  8. 【斐波拉契+数论+同余】【ZOJ3707】Calculate Prime S

    题目大意: S[n] 表示 集合{1,2,3,4,5.......n} 不存在连续元素的子集个数 Prime S 表示S[n]与之前的所有S[i]互质; 问 找到大于第K个PrimeS 能整除X 的第 ...

  9. [代码]Java后台推送消息到IOS前端

    PayLoad payLoad = new PayLoad(); payLoad.addAlert("test");    //手机端的提示消息 payLoad.addBadge( ...

  10. uva 1471 Defense Lines

    题意: 给一个长度为n(n <= 200000) 的序列,你删除一段连续的子序列,使得剩下的序列拼接起来,有一个最长的连续递增子序列 分析: 就是最长上升子序列的变形.需要加一个类似二分搜索就好 ...