zoukankan      html  css  js  c++  java
  • YII场景

      YII在模型中定义场景后

    public function scenarios(){//场景
            return [
                'sco1'=>['aid','uphone'],
                'sco2'=>['aid','uphone','status'],
            ];
        }

      在控制器中调用场景时,场景定义之外的字段会在操作时被过滤掉

    public function actionSenorio(){
            $test = new Code();
            $test->scenario = "sco1";
            $testData = [
                'data'=>['aid'=>3,'uphone'=>'015889383625'],
            ];
            $test->load($testData,'data');//在使用load前需要制定场景
            echo $test->aid;//3
    
            /**
             * 博客系统
             * 写文章时和修改文章时需要保留不同的字段,其他字段会被忽略
            **/
        }

     scenarios() 方法默认实现会返回所有yiiaseModel::rules()方法申明的验证规则中的场景, 当覆盖scenarios()时,如果你想在默认场景外使用新场景,可以编写类似如下代码:

    namespace appmodels;
    
    use yiidbActiveRecord;
    
    class User extends ActiveRecord
    {
        public function scenarios()
        {
            $scenarios = parent::scenarios();
            $scenarios['login'] = ['username', 'password'];
            $scenarios['register'] = ['username', 'email', 'password'];
            return $scenarios;
        }
    }

    上面写的可能不是很清晰,我另找了一个 

    public function scenarios()
    {
        return [
            'create' => ['title', 'image', 'content'],
            'update' => ['title', 'content'],
        ];
    }
    [['title', 'content'], 'required', 'on' => ['create', 'update']],
    [['image'], 'required', 'on' => 'create'],
    [['image'], 'image', 'enableClientValidation' => true,   'maxSize' => 1024, 'message' => '您上传的文件过', 'on' => ['create']],
    $model = $this->findModel($id);
    $model->setScenario('update'); or $model->scenario = 'update';
  • 相关阅读:
    快速开始
    阿里为什么选择RocketMQ
    4 分布式消息队列的协调者
    9 首个Apache中间件顶级项目
    3、用适合的方式发送和接收消息
    2 生产环境下的配置和使用
    TOMCAT加载两次war包(重复加载)
    Google Protocol Buffer 的使用(二)
    Google Protocol Buffer 的使用(一)
    PostgreSQL及PostGIS使用
  • 原文地址:https://www.cnblogs.com/isuben/p/5533659.html
Copyright © 2011-2022 走看看