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

    我生活的地方,我为何要生活。
  • 相关阅读:
    Using F2 to Rename Open Files
    Java 浅析 Thread.join()
    JDK 8
    Automata
    The Hungarian Abhorrence Principle
    Spring 与 MyBatis 的整合
    JDK 8
    面向对象设计原则汇总
    Java Error : type parameters of <T>T cannot be determined during Maven Install
    【源码拾遗】从vue-router看前端路由的两种实现
  • 原文地址:https://www.cnblogs.com/hsd1727728211/p/5858809.html
Copyright © 2011-2022 走看看