Yii2学习笔记之场景

场景

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

  模型使用 yii\base\Model::scenario 属性保持使用场景的跟踪, 默认情况下,模型支持一个名为 default 的场景, 两种设置场景的方法:

//场景作为属性来设置

$model = new User;
$model -> scenario = ‘login‘;

//场景通过构造初始化配置来设置

$model = new User([‘scenario‘ => ‘login‘]);

  默认情况下,模型支持的场景由模型中申明的验证规则来决定,为此你可以指定规则的 on 属性,如下所示:

public function rules()
{
    return [
        // 在"register" 场景下 username, email 和 password 必须有值
        [[‘username‘, ‘email‘, ‘password‘], ‘required‘, ‘on‘ => ‘register‘],

        // 在 "login" 场景下 username 和 password 必须有值
        [[‘username‘, ‘password‘], ‘required‘, ‘on‘ => ‘login‘],
    ];
}

   但你可以通过 yii\base\Model::scenarios() 方法来自定义行为, 如下所示:

namespace app\models;

use yii\db\ActiveRecord;

class User extends ActiveRecord
{
    const SCENARIO_LOGIN = ‘login‘;
    const SCENARIO_REGISTER = ‘register‘;

    public function scenarios()
    {
        return [
            self::SCENARIO_LOGIN => [‘username‘, ‘password‘],
            self::SCENARIO_REGISTER => [‘username‘, ‘email‘, ‘password‘],
        ];
    }
}
时间: 2024-11-04 21:36:36

Yii2学习笔记之场景的相关文章

Cocos2dx 学习笔记整理----场景切换

据说Cocos2dx场景切换的方法有32种:cocos2dx 常见的32种切换场景的动画 无需一一求证,只需要知道切换场景需要怎么做就行了. 作为导演CCDirector,切换场景的事情当然归它管了. 切换场景的接口如下: ? 1 CCDirector::sharedDirector()->replaceScene(cocos2d:CCScene * pScene); 所以,我们只要把需要切换的场景实例传进去就可以了. ? 1 2 CCScene * pScene = GameMain::sce

yii2学习笔记

之前看过Yii2框架,也在其他框架实现其Gii手脚架功能,现在开始使用Yii做项目,顺便记录一下学习笔记 先推荐一个网址 Yii2速查表(中文版)http://nai8.me/tool-sc.html Yii和Laravel类似,都有一个全局的app实例化对象,下面先来看看Yii::app() Yii::app() 是一个实例化的对象,是我们在当前框架里边可以直接操作的对象, 我们可以把这个对象理解成请求应用的第一个对象. Yii框架是纯OOP面向对象框架,也就是利用对象调用类的属性.方法,完成

Yii2学习笔记1--Yii2的基本介绍和Composer安装

一.Yii的基本介绍 Yii 是一个高性能的,以快速,安全,专业著称 , 适用于开发 WEB2.0 应用的 PHP 框架 .自带了丰富的功能 ,包括 MVC,DAO/ActiveRecord,I18N/L10N,缓存,身份验证和基于角色的访问控制,脚手架,测试等,可显著缩短开发时间. 二.Yii1.1和Yii2 没有Yii1.1的经验,并不妨碍对Yii2.0的学习.因为对ThinkPHP3.2.3较熟悉,可以两者对比着学(感觉很类似). 三.Windows 系统用Composer安装Yii2 ①

hadoop学习笔记--哪些场景不适合 哪些场景适合

Hadoop不是万能的,有些场景适用,有些不适用. Hadoop设计的目的主要包括下面几个方面,也就是所谓的适用场景: 1:超大文件 可以是几百M,几百T这个级别的文件. 2:流式数据访问 Hadoop适用于一次写入,多次读取的场景,也就是数据复制进去之后,长时间在这些数据上进行分析. 3:商业硬件 也就是说大街上到处都能买到的那种硬件,这样的硬件故障率较高,所以要有很好的容错机制. 接下来说说不适用的场景: 1: 低延迟数据访问 Hadoop设计的目的是大吞吐量,所以并没有针对低延迟数据访问做

Yii2学习笔记一 GridView

第一次知道Yii框架其实是个偶然. 我刚工作半年,一直是使用国内的ThinkPHP框架,这个框架的好处是对初学者比较友好,学习成本低,不需要知道框架的底层就可以很顺利的完成一个WEB项目.缺点是更改过后的模板引擎支持解析的模板标签深度有限制,比如你如果有很多foreach循环,就必须 知道,超过三层时框架是不解析的.虽然也是使用Smarty模板引擎修改而来,但功能却不如Smarty. 还是一个同学不小心提醒我,他说都不会ThinkPHP框架,我才知道,我就会ThinkPHP框架了. 还在培训学校

redis学习笔记——应用场景

最近在看redis入门指南,现在就自己的学习情况说说自己的理解. 字符串类型(String) 字符串类型是Redis中最基本的类型,能存储任意形式的字符串,包括二进制数据.如一张照片也可以用字符串类型存储.注意字符串类型键允许存储的数据最大容量是512M. Strings 数据结构是简单的key-value类型,value其实不仅是String,也可以是数字.除了get.set.incr.decr 等操作外,Redis还提供了下面一些操作: 获取字符串长度:往字符串append内容:设置和获取字

Yii2 学习笔记 01 -- 依赖注入在yii2中的应用

什么是依赖注入?                  依赖注入(Dependency Injection)是设计模式的一种.名字比较抽象,但是,要解决的问题却是比较明确.对于给定的应用程序,需要借助一些相对独立的组件来完成功能.一般来说,使用这些组件的过程就包含在应用程序的逻辑语句之中.问题是,当这些组件想要做成类似插件功能,以达到应用程序的业务逻辑不变就能随意的更改组件的实现的效果.这种灵活性取决于应用程序如何组装这些组件.如果说应用程序依赖于这些组件的话,依赖注入就是把这些依赖关系从应用程序的

Yii2学习笔记:汉化yii,设置表单的描述(属性标签attributeLabels)

一:汉化框架 框架汉化在这里设置,如果不生效,前台后台的配置文件都设置下应该就可以了 二:汉化表单 汉化表单,直接在模型层设置,例如: 原来的联系我们表单 汉化后: ] 这种汉化在哪里修改呢?其实是设置属性标签,设置位置在模型层 代码如下 public function attributeLabels() { return [ 'name' => '称呼', 'email' => '邮箱', 'subject' => '标题', 'body' => '内容', 'verifyCod

慕课网,我的yii2学习笔记(基础篇)

一.关于PHP知识点 1.命名空间:存放类文件的空间,可以随便定义,建议与类文件目录一致,方便管理. 注:(1).如果类没有设置命名空间,默认为顶级命名空间,在程序中可以用一下方式实例化. $model = new \Class() (2).如果引入类名相同,可以用一下代码区分. use a\Class; use b\Class as B_Class; 2.session: 每个浏览器存储网站的session时会产生一个PHPSESSID,对应到服务器用存储session文件的名字. 二.关于Y