YII2 场景运用 demo

本文详细介绍了在Yii2框架中如何使用场景(scenario)进行数据验证,包括在Model中声明场景、通过rules方法指定不同场景下的验证规则,以及在控制器中设置具体的场景等关键步骤。

一、在model中声明场景

如果要定义 方法名必须是 scenarios()

如果不定义 scenarios(),只在controller里注明  场景值的话,会把未加场景的rule和对应场景的一同验证。

如果在controller里也未注明  场景值的话,rules中绑定场景的字段则不验证,只验证通用字段。

create 场景包含'amount', 'years', 'type', 'handlerName', 'departmentID', 'feeID', 'purpose',

update 场景 对'amount', 'years',  不做要求。就需要单独对 create 场景中  'amount', 'years'进行配置规则。

public function scenarios()
{
    return [
        'create' => ['amount', 'years', 'type', 'handlerName', 'departmentID', 'feeID', 'purpose'],
        'update' => ['type', 'handlerName', 'departmentID', 'feeID', 'purpose'],
    ];

}


//参考网上更优做法
public function scenarios()
{
    //合并了父类scenarios方法的default场景,避免了设置场景后没有设置场景(没有设置场景是default场景)的模型rules验证问题
    return array_merge(parent::scenarios(), [
        'create' => ['amount', 'years', 'type', 'handlerName', 'departmentID', 'feeID', 'purpose'],
        'update' => ['type', 'handlerName', 'departmentID', 'feeID', 'purpose'],
    ]);
}

二、 reles()  on 关键字绑定,一个场景用字符串,多个场景用数组

 public function rules()
    {
        return [
            ....
            [['type', 'handlerName', 'departmentID', 'feeID', 'purpose'], 'required', 'on' => ['create','update']],//场景关键词 on  ,场景名与方法无关。
            [['amount', 'years'], 'required', 'on' => ['create']],
        ];
    }

三、控制器方法里注明场景

public function actionCreate()
{
        $model = new AnnualBudget();
        //$model = AnnualBudget(['scenario' => 'create']);//有此行即可省略下面
        $model->scenario = 'create';//对应模型里的场景名!
        //$model->setScenario('create')
        .....
}

 


针对yii2中文社区的场景法。可以参考下http://www.yiichina.com/tutorial/89

 

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值