美文网首页
YII2 场景运用 demo

YII2 场景运用 demo

作者: 阿_莫西林 | 来源:发表于2020-04-30 17:29 被阅读0次

    一、在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

    相关文章

      网友评论

          本文标题:YII2 场景运用 demo

          本文链接:https://www.haomeiwen.com/subject/wmrtghtx.html