zoukankan      html  css  js  c++  java
  • [moka同学笔记]yii2场景的使用(摘录)

    前半部分为自己使用的过程,下边为转载的,具体地址见:http://blog.sina.com.cn/s/blog_88a65c1b0101j717.html

    1.在model中

    public function rules()
    {
        return [
            [['join_verify', 'create_activity', 'is_open_group', 'is_open_child_com','sendmail_limit','sendmail_from_name','sendmail_from','sendmail_replyto'],
    'required','on'=>'setting'], [['com_id', 'join_verify', 'create_activity', 'is_open_group', 'is_open_child_com', 'is_deleted','is_open_sendmail'], 'integer'], [['sendmail_limit'],'match','pattern'=>'/^[1-9]d*|0$/','message'=>'必须为正整数'], [['created_at', 'update_at'], 'safe'], [['sendmail_from_name'],'string','max'=>25], [['qr_code_path'], 'string', 'max' => 200], [['join_declare', 'join_form_ids'], 'string', 'max' => 255], [['sendmail_smtp','sendmail_from','sendmail_replyto'], 'email'], [['sendmail_smtp','sendmail_from','sendmail_replyto'],'string','max'=>50] ]; }

    2.在控制器controller中使用

    //设置邮件
    public function actionIndex($id){
        $model = CommunitySetting::find()
            ->joinWith('communityMail')
            ->where(['usho_community_setting.com_id'=>$id])
            ->one();
        if(!$model){
            $this->endOutputJson([
                'status' => 0,
                'alertType' => 'danger',
                'alertMsg' => '未找到所需要的数据:('
            ]);
        }
    
    $model->scenario = 'setting';
    
    
       if($_POST){
           Yii::$app->request->isPost ;
           if($model->load(Yii::$app->request->post()) && $model->validate() && $model->save()){
               Yii::$app->getSession()->setFlash('success', '保存成功');
               $this->endOutputJson([
                   'status' => 1,
                   'alertType' => 'info',
                   'alertMsg' => '保存成功',
                   'redirect' => Yii::$app->request->url,
               ]);
           }else{
               $errArr = [];
               $model->errors ? $errArr = $model->errors : '';
               $this->endOutputJson([
                   'status' => 0,
                   'alertType' => 'danger',
                   'alertMsg' => $errArr
               ]);
           }
        }
    
        return $this->render('index',[
            'model'=>$model
        ]);
    }
     
    理解为在设置邮件表单的时候,会用场景,而在编辑的时候,则不会在去验证。
     
    上面感觉自己理解的不透彻,只是简单实现了功能。后来看到了下面的博客,整理说明的比较详细。

    下面给大家介绍一下 yii2.0 场景的使用。小伙多唠叨一下了,就是担心有的人还不知道,举个简单的例子,现在在 post表里面有 title image content 三个的字段,当我创建一个 post 的时候,我想三个字段全部是必填项,但是你修改的时候,title content 两个字段是必填的, iamge 可以不填写。正常的情况下,

    [['title', 'content', 'image'], 'required',],   但是我们更改的时候  只需要 [['title', 'content'], 'required'], 就可以了,但是少了 image 字段  我们的表单就无法提交,这种问题怎么办啊??场景可以帮你解决这种问题,下面是一个简单的场景实例。

    1、首先我们在 model 里面定义一下场景  类名必须是  scenarios()

    public function scenarios()
    {
    return [
      'create' => ['title', 'image', 'content'],
      'update' => ['title', 'content'],
    ];
    }

    2、好的,如上所示,场景的基本设置我们就已经完成一部分了,下面我们设置  rules() ,调用场景我们用 on 关键字

    [['title', 'content'], 'required', 'on' => ['create', 'update']],
    [['image'], 'required', 'on' => 'create'],
    [['image'], 'image', 'enableClientValidation' => true,   'maxSize' => 1024, 'message' => '您上传的文件过大', 'on' => ['create', 'update']],

    on 指定的就是场景,一个场景用字符串,多个场景用数组

    3、好的,model 里面我们就设置完毕了 现在开始调用吧 Controller 里面

    $model = $this->findModel($id);

    $model->setScenario('update'); 或者 $model->scenario = 'update';   都可以

    上面的意思就是 调用 update 场景。一切就是这么简单,

    具体地址见:http://blog.sina.com.cn/s/blog_88a65c1b0101j717.html

    我生活的地方,我为何要生活。
  • 相关阅读:
    Hadoop集群(三) Hbase搭建
    Hadoop集群(二) HDFS搭建
    Hadoop集群(一) Zookeeper搭建
    Redis Cluster 添加/删除 完整折腾步骤
    Redis Cluster在线迁移
    Hadoop分布式HA的安装部署
    Describe the difference between repeater, bridge and router.
    what is the “handover” and "soft handover" in mobile communication system?
    The main roles of LTE eNodeB.
    The architecture of LTE network.
  • 原文地址:https://www.cnblogs.com/hsd1727728211/p/5858809.html
Copyright © 2011-2022 走看看