前半部分为自己使用的过程,下边为转载的,具体地址见: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

[moka同学笔记]yii2场景的使用(摘录)的更多相关文章

  1. [moka同学笔记]yii2.0查询数据库

      一. [:id占位符]使用 $results = Test::findBySql($sql,array(':id'=>'1 or 1=1))->all()   二. [id=1]  选 ...

  2. [moka同学笔记]Yii2.0 modal的使用

    第一次使用,时候不明白什么原理,大概用了几次后,才模模糊糊搞清楚原来是怎么一回事,现在就把写过的代码,贴在下边. 1.在视图文件中, 第一步首先在index.php文件中 做了一个a链接的按钮 调用了 ...

  3. [moka同学笔记]Yii2.0验证码

    1.Model中Code.php <?php /** * Created by PhpStorm. * User: moka同学 * Date: 2016/07/25 * Time: 10:48 ...

  4. [moka同学笔记]yii2.0表单的使用

    1.创建model   /biaodan.php <?php /** * Created by PhpStorm. * User: moka同学 * Date: 2016/08/05 * Tim ...

  5. [moka同学笔记]yii2.0小物件的简单使用(第二种方法)

    1.在widgets/TestWidget.php中 <?php /** * Created by PhpStorm. * User: moka同学 * Date: 2016/08/05 * T ...

  6. [moka同学笔记]yii2.0小物件的简单使用(第一种方法)

    这是第一种方法,还有另一种方法,其实都差不多. 1.在创建widgets\HelloWiget.php <?php /** * Created by PhpStorm. * User: Admi ...

  7. [moka同学笔记]yii2.0缓存

    1.控制器中CacheDemoController.php <?php /** * Created by PhpStorm. * User: moka同学 * Date: 2016/06/29 ...

  8. [moka同学笔记]yii2.0数据库操作以及分页

    1.model中models/article.php 1 <?php 2 3 namespace app\models; 4 5 use Yii; 6 7 /** 8 * This is the ...

  9. [moka同学笔记]Yii2中多表关联查询(join、joinwith) (摘录)

    表结构 现在有客户表.订单表.图书表.作者表, 客户表Customer   (id  customer_name) 订单表Order          (id  order_name       cu ...

随机推荐

  1. WebApp开发之--"rem"单位(转)

    随着web app的兴起,rem这是个低调的css单位,近一两年开始崭露头角,有许多朋友对于它的评价不一,有的在尝试使用,有的在使用过程中遇到坑就弃用了.但是我认为rem是用来做web app它绝对是 ...

  2. win7中安装redis

    1.下载redis安装版本 https://github.com/rgl/redis/downloads 2.设置环境变量 将redies的安装目录设置为环境变量 参考: http://www.cnb ...

  3. CSS基础(二):基础和语法

    CSS语法 CSS 规则由两个主要的部分构成:选择器,以及一条或多条声明.选择器通常是您需要改变样式的 HTML 元素. selector {declaration1; declaration2; . ...

  4. 锁屏上显示Activity

    在Android中,有些比较强的提醒,需要用户紧急处理的内容.需要唤醒屏幕,甚至在锁定屏幕的情况下,也要显示出来.例如,来电界面和闹钟提醒界面.这是怎样实现的呢? 其实,实现起来非常简单.只要给Act ...

  5. Backbone之旅——Model篇

    Backbone作为前端的MVC框架,把后端的设计思想带到前端,使前端代码更加清晰.可维护性大大提高 Backbone依赖于underscore.js和jquery,所以在使用backbone的时候一 ...

  6. Jquery实现ready()的源码

    function bindReady(){ if ( readyBound ) return; readyBound = true; // Mozilla, Opera and webkit nigh ...

  7. 从function前面的!想到的

    最近没事喜欢看看,一些js库的源码,结果发现库前不是加一个!就是加+或者一个(),心中猜出个大概知道这个是让函数自动执行,可是这么多符号达到同一个目的,原理是什么呢,下面做一下剖析: 先从IIFE开始 ...

  8. Nutch插件系统

    Nutch 基本情况 Nutch 是 Apache 基金会的一个开源项目,它原本是开源文件索引框架 Lucene 项目的一个子项目,后来渐渐发展成长为一个独立的开源项目.它基于 Java 开发,基于 ...

  9. 【转载】linux内核启动android文件系统过程分析

    主要介绍linux 内核启动过程以及挂载android 根文件系统的过程,以及介绍android 源代码中文件系统部分的浅析. 主要源代码目录介绍Makefile (全局的Makefile)bioni ...

  10. matlab processing for video

    [filename,pathname,fileindex]=uigetfile('*.avi','请选择一个Avi文件'); video_info=aviinfo([pathname filename ...