遇到的问题

起作用了
但是使用create的时候,保存却出了问题,提示unknown scenarios:default

解决方法

后来找文章,是因为设置场景的时候,直接把父类的场景覆盖了。所以应该这样写scenarios

 
public function scenarios()
{
$scenarios = parent::scenarios();
$scenarios['editmobile'] = ['mobile'];
return $scenarios;
}
总结:

下面给大家介绍一下 yii2.0 场景的使用。小伙多唠叨一下了,就是担心有的人还不知道,举个简单的例子,现在在 post表里面有 title image content 三个的字段,当我创建一个 post 的时候,我想三个字段全部是必填项,但是你修改的时候,title content 两个字段是必填的, iamge 可以不填写。正常的情况下,
[['title', 'content', 'image'], 'required',], 但是我们更改的时候 只需要 [['title', 'content'], 'required'], 就可以了,但是少了 image 字段 我们的表单就无法提交,这种问题怎么办啊?? 场景可以帮你解决这种问题,下面是一个简单的场景实例。

1、首先我们在 model 里面定义一下场景 类名必须是 scenarios()  记住不要把父类的scenarios方法覆盖了,一定要与父类的方法合并起来

方案一:这样会把父类方法覆盖导致报错,

public function scenarios()
{
return [
'create' => ['title', 'image', 'content'],
'update' => ['title', 'content'],
];
} 方案二:把自定义方法的内容,合并到父类里
public function scenarios()
{
$scenarios = parent::scenarios();
$scenarios['create'] = ['mobile','title'];
$scenarios['updata'] = ['mobile','title','content'];
return $scenarios; }

方案三:
把自定义方法的内容,合并到父类里
 

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

return array_merge(parent::scenarios(),$scenarios);
}

 
 

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

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

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

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

$model = $this->findModel($id);
$model->setScenario('update'); or $model->scenario = 'update';

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

yii2场景的更多相关文章

  1. [moka同学笔记]yii2场景的使用(摘录)

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

  2. Yii2 场景

    下面给大家介绍一下 yii2.0 场景的使用. 现在在 post表里面有 title image content 三个的字段,当我创建一个 post 的时候,我想三个字段全部是必填项,但是你修改的时候 ...

  3. yii2场景的应用(scenarios)

    例如: 现在在 post表里面有 title image content 三个的字段,当我创建一个 post 的时候,我想三个字段全部是必填项,但是你修改的时候,title content 两个字段是 ...

  4. yii2 场景使用

    场景定义 //场景 const SCENARIO_USER_CREATE='0';//前台用户新增 const SCENARIO_USER_UPDATE='1';//前台用户更新 场景配置 publi ...

  5. Yii2 场景scenario的应用

    首先,我们在使用模型类中的验证,rules的时候,会出现以下情况: 假设有一个字段type, 当type

  6. yii验证系统学习记录,基于yiicms(一)写的太长了,再写一篇(二)

    项目地址:https://gitee.com/templi/yiicms 感谢七觞酒大神的付出,和免费分享.当然也感谢yii2的开发团队们. 项目已经安全完毕,不知道后台密码,这种背景下,后台无法进去 ...

  7. Yii2.0中场景的使用小记

    熟悉Yii框架的人都知道,灵活的使用场景可以达到事半功倍的效果! 比如普通的数据的新增.修改,新增需要验证其中两个字段,而修改只需要验证其中一个字段:还有种情况,也是我们现在用到的,同一张表(同一个m ...

  8. yii2中的场景使用

    下面给大家介绍一下 yii2.0 场景的使用.小伙多唠叨一下了,就是担心有的人还不知道,举个简单的例子,现在在 post表里面有 title image content 三个的字段,当我创建一个 po ...

  9. Yii2学习笔记之场景

    场景 一个模型可能在多个场景中使用,在不同的场景中,模型可能使用不同的业务逻辑和规则.例如, User 模型可能在用户登录时使用,也可能在用户注册时使用,某些属性可能在用户注册时强制要求有,在用户登录 ...

随机推荐

  1. 自动化运维(2)之一键式单实例安装MySQL

    ZMySQLAutoTools文档 目标:自动化构建部署MySQL数据库,一键式单实例mysql安装,备份,监控,主从集群部署等.以及jdk,tomcat,nginx等基础中间件的自动化部署安装及运维 ...

  2. GNU μC/OS-II 在 S3C2440 上中断的实现

    上一篇文章介绍了S3c2440的中断体系结构,今天我们来分析一下GNU-uC/OS-II在S3c2440上中断的实现. 首先找到IRQ的中断的向量,位于 2440init.S : OK ,我们通过名字 ...

  3. C# Azure 远程调试

    Azure上的配置 1. 登录我们自己的app,开启远程调试 [远程调试]—> 打开 [远程 Visual Studio 版本] –> 2017,看你是什么版本 这里有点需要注意的是,如果 ...

  4. c#cookie读取写入操作

    public static void SetCookie(string cname, string value, int effective) { HttpCookie cookie = new Ht ...

  5. T-SQL:探究UNOIN,INTERSECT,EXCEPT集合运算符(十一)

    1.UNOIN运算符 unoin合并了两个输入查询结果 并消除重复项  简单点说   就是输出并集 SELECT country, region, city FROM HR.Employees UNI ...

  6. OAuth2.0的refresh token

    最近看人人网的OAuth认证,发现他是OAuth2.0,之前一直看的是新浪的OAuth,是OAuth1.0. 二者还是有很多不同的,主要的不同点在access token的获取方式. OAuth1.0 ...

  7. JS如何判断一个对象是否为空、是否有某个属性

    一.js判断一个对象是否为空 方法一: let obj1 = {} let obj2 = {a:1} function empty(obj){ for (let key in obj){ return ...

  8. inheritConstructorStealing.js

    // 借用构造函数 // 其基本思路是在子类型构造函数的内部调用父类型的构造函数 function Person(name){ this.name = name; this.friends = [&q ...

  9. 原生JS强大DOM选择器querySelector与querySelectorAll

    在传统的 JavaScript 开发中,查找 DOM 往往是开发人员遇到的第一个头疼的问题,原生的 JavaScript 所提供的 DOM 选择方法并不多,仅仅局限于通过 tag, name, id ...

  10. JS之this应用详解

    目录 1. this作为全局变量2. 作为对象方法的调用3. 作为构造函数调用4. apply调用 this是Javascript语言的一个关键字.它代表函数运行时,自动生成的一个内部对象,只能在函数 ...