Yii2 表单模型的场景使用

▪ 前言

Yii2.0 的表单模型里我们经常 scenarios,直译过来就是场景的意思,究竟其有什么作用呢?

举个简单的例子,例如管理员填写表单里面有 usernamepassword 两个的字段,当新增一个管理员时两个字段全部是必填项;但是修改的时候,只用 username 字段必填,password 可以不填。

正常的情况下,新增时的规则:[['username','password'], 'required'],而编辑时的规则:[['username'], 'required'] 就可以了。但是如何让两条规则同时存在又互不影响你呢?场景可以帮你解决这种问题,下面是一个简单的场景实例。

▪ 实例

模型层:

public function rules()
{
    return [
        ['username','required', 'message'=>'账号不能为空'],
        ['password','required', 'message'=>'密码不能为空', 'on'=>'update']  // `on` 字段表示该规则应用的场景
    ];
}

控制器:

$formAdmin = new FormAdmin();

if( Yii::$app->request->isPost ){
    $formAdmin->load(Yii::$app->request->post(), '');
    $formAdmin->validate();
}

当控制器里面没有使用任何场景:validate() 函数仅验证账号,密码不验证。

$formAdmin = new FormAdmin();

if( Yii::$app->request->isPost ){
    $formAdmin->load(Yii::$app->request->post(), '');
    $formAdmin->setScenario('update');
    $formAdmin->validate();
}

当控制器里面设置了 update 场景:validate() 函数验证账号,同时也验证密码。

总结一:

  • 指定 'on' 字段值的规则(rule)仅在其对应场景下执行
  • 没有 'on' 字段值的规则(rule)将在任何场景下被执行

▪ 高级

默认情况下,表单模型的验证机制采用 总结一 的规则执行,但是当我们重写表单模型的 scenarios() 函数后,我们又可以另外的验证机制,例如:

public function scenarios()
{
    return [
        'update'=>['password']  // 表示 update 场景下仅处理 'password' 字段
                                // 实际效果:在 update 场景下只验证密码,其他的都不验证
    ];
}

总结二:

  • 当指定了场景的字段后,那么没有 'on' 字段值的规则(rule)将不被执行
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值