yii2场景

遇到的问题

起作用了
但是使用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 场景。一切就是这么简单,

时间: 2024-11-08 10:43:57

yii2场景的相关文章

Yii2 场景

下面给大家介绍一下 yii2.0 场景的使用. 现在在 post表里面有 title image content 三个的字段,当我创建一个 post 的时候,我想三个字段全部是必填项,但是你修改的时候,title content 两个字段是必填的, iamge 可以不填写.正常的情况下,[['title', 'content', 'image'], 'required',], 但是我们更改的时候 只需要 [['title', 'content'], 'required'], 就可以了,但是少了

[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'

yii2中的场景使用

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

Yii2学习笔记之场景

场景 一个模型可能在多个场景中使用,在不同的场景中,模型可能使用不同的业务逻辑和规则.例如, User 模型可能在用户登录时使用,也可能在用户注册时使用,某些属性可能在用户注册时强制要求有,在用户登录时不需要,例如email属性. 模型使用 yii\base\Model::scenario 属性保持使用场景的跟踪, 默认情况下,模型支持一个名为 default 的场景, 两种设置场景的方法: //场景作为属性来设置 $model = new User; $model -> scenario =

yii2.0场景的简单使用

一.规则中使用场景规则场景的使用模型层public function rules(){ return [ [['name','product_id'],'required','on'=>'add], ];}表示只在add场景下改规则才生效.在控制器中指定场景:$model->scenario = "add";或者$model = new User(['scenario' => 'add']); 最后使用函数触发验证: $model->load(Yii::$app

Yii2框架RESTful API教程(二) - 格式化响应,授权认证和速率限制

之前写过一篇Yii2框架RESTful API教程(一) - 快速入门,今天接着来探究一下Yii2 RESTful的格式化响应,授权认证和速率限制三个部分 一.目录结构 先列出需要改动的文件.目录如下: web ├─ common │ └─ models │ └ User.php └─ frontend ├─ config │ └ main.php └─ controllers └ BookController.php 二.格式化响应 Yii2 RESTful支持JSON和XML格式,如果想指定

yii2 ActiveRecord多表关联以及多表关联搜索的实现

一个老生常谈的问题.最近通过群里的反馈,觉得很多人还是没有去理解这个问题.今天把这个问题讲明白了,看看yii2 ActiveRecord是怎么个多表关联以及如何去优化这个关联. 场景需求: 假设我们有一张用户表user和一张用户渠道表auth,两张数据表通过user.id和auth.uid进行一对一关联.现需要在user列表展示auth表的来源渠道source,且该渠道可搜索. 首先我们先通过gii生成user和auth系列相关的model和操作.此处不做详细说明,有关gii的操作可参考gii详

Yii2 时间控件之把layDate做成widget

实现效果如下 1.把layDate封装成Yii2的widget,存在 "\common\widgets"目录下,命名为DycLayDate,具体引用查看代码. 2.对应的model的rules方法加上: [['cms_publish_date'], 'date', 'format'=>'yyyy-MM-dd HH:mm:ss' , 'message' => '{attribute}格式不正确', 'on' => ['createDo', 'updateDo'] ] 其

yii2源码学习笔记(六)

Behvaior类,Behavior类是所有事件类的基类: 目录yii2\base\Behavior.php 1 <?php 2 /** 3 * @link http://www.yiiframework.com/ 4 * @copyright Copyright (c) 2008 Yii Software LLC 5 * @license http://www.yiiframework.com/license/ 6 */ 7 8 namespace yii\base; 9 10 /** 11