关于Yii中模型场景的一些简单介绍


Posted in PHP onSeptember 22, 2019

前言

在Yii中模型字段验证有一个场景的概念,可以在不同的场景下设置不同的验证规则,在Yii中的场景默认为default,简单实现如下

下面我以用户表,表中字段为user_name,password

简单规则如下

public function rules() {
 return [
 [['user_name', 'password'], 'required'],
 [['user_name', 'password'], 'string', 'max' => 255],
 ];
}

一:

如果我们需要在新增时验证user_name和password两个字段,在更新时只验证user_name字段

这时候我们可以在模型中覆盖yiibaseModel::scenarios()方法来自定义行为

public function scenarios()
{
 return [
 'create' => ['user_name', 'password'],//create表示新增场景
 'update' => ['user_name'],//update表示更新场景
 ];
}

根据上面设置的场景规则,我们只需要在我们新增和更新时设置为指定的场景即可

// 场景作为属性来设置
$model = new User;
$model->scenario = 'create';
// 场景通过构造初始化配置来设置
$model = new User(['scenario' => 'create']);

根据如上就可以实现在不同的场景下验证指定的字段

二:

我们可以在规则rule中使用on属性来设置不同的场景

public function rules() 
{
 return [
 [['id'], 'integer'],
 [['user_name'], 'required'],
 [['password'], 'required', 'on' => 'create']
 [['user_name', 'password'], 'string', 'max' => 255],
 ];
}

根据如上在create场景下password字段必填

三:

使用yiibaseModel::validate() 来验证接收到的数据

$model = new User();
$model->validate(['user_name'])

使用validate方法验证user_name,验证通过返回true,否则返回false

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。

PHP 相关文章推荐
php去除重复字的实现代码
Sep 16 PHP
PHP遍历数组的几种方法
Mar 22 PHP
PHP Error与Logging函数的深入理解
Jun 03 PHP
探讨:如何编写PHP扩展
Jun 13 PHP
thinkphp实现数组分页示例
Apr 13 PHP
PHP ajax 异步执行不等待执行结果的处理方法
May 27 PHP
PHP生成制作验证码的简单实例
Jun 12 PHP
Zend Framework数据库操作方法实例总结
Dec 11 PHP
Laravel学习教程之View模块详解
Sep 18 PHP
PHP基于curl post实现发送url及相关中文乱码问题解决方法
Nov 25 PHP
PHP针对redis常用操作实例详解
Aug 17 PHP
laravel实现图片上传预览,及编辑时可更换图片,并实时变化的例子
Nov 14 PHP
php定期拉取数据对比方法实例
Sep 22 #PHP
php设计模式之工厂模式用法经典实例分析
Sep 20 #PHP
php设计模式之单例模式用法经典示例分析
Sep 20 #PHP
php数组和链表的区别总结
Sep 20 #PHP
php输出反斜杠的实例方法
Sep 19 #PHP
php实现session共享的实例方法
Sep 19 #PHP
php进行md5加密简单实例方法
Sep 19 #PHP
You might like
判断PHP数组是否为空的代码
2011/09/08 PHP
php中通过正则表达式下载内容中的远程图片的函数代码
2012/01/10 PHP
测试php函数的方法
2013/11/13 PHP
php示例详解Constructor Prototype Pattern 原型模式
2015/10/15 PHP
Nigma vs Alliance BO5 第四场2.14
2021/03/10 DOTA
Prototype 工具函数 学习
2009/07/23 Javascript
使用jQuery全局事件ajaxStart为特定请求实现提示效果的代码
2010/12/30 Javascript
js 判断脚本加载完毕的代码
2011/07/13 Javascript
什么是 AngularJS?AngularJS简介
2014/12/06 Javascript
JS简单实现tab切换效果的多窗口显示功能
2016/09/07 Javascript
浅谈webpack打包生成的bundle.js文件过大的问题
2018/02/22 Javascript
JS+H5 Canvas实现时钟效果
2018/07/20 Javascript
Vue项目history模式下微信分享爬坑总结
2019/03/29 Javascript
在JavaScript中使用严格模式(Strict Mode)
2019/06/13 Javascript
vue移动端模态框(可传参)的实现
2019/11/20 Javascript
[02:27]2014DOTA2国际邀请赛 VG赛后采访:更大的挑战在等着我们
2014/07/13 DOTA
[01:00:14]2018DOTA2亚洲邀请赛 4.6 淘汰赛 VP vs TNC 第三场
2018/04/10 DOTA
Python语言实现获取主机名根据端口杀死进程
2016/03/31 Python
python运行其他程序的实现方法
2017/07/14 Python
pytorch 归一化与反归一化实例
2019/12/31 Python
Iconfont(矢量图标)+iconmoon(图标svg互转)配合javascript实现社交分享系统
2020/04/21 Python
Pygame的程序开始示例代码
2020/05/07 Python
Python爬取股票信息,并可视化数据的示例
2020/09/26 Python
python中turtle库的简单使用教程
2020/11/11 Python
html5 canvas-1.canvas介绍(hello canvas)
2013/01/07 HTML / CSS
使用jTopo给Html5 Canva中绘制的元素添加鼠标事件
2014/05/15 HTML / CSS
iRobot官网:改变生活的家用机器人品牌
2016/09/20 全球购物
波兰品牌内衣及泳装网上商店:Astratex.pl
2017/02/03 全球购物
英国最大线上综合鞋类商城:Office
2017/12/08 全球购物
C/C++程序员常见面试题二
2015/11/19 面试题
北京奥运会主题口号
2014/06/13 职场文书
迎新晚会策划方案
2014/06/13 职场文书
个人自荐书怎么写
2015/03/26 职场文书
《我是什么》教学反思
2016/02/16 职场文书
[有人@你]你有一封绿色倡议书,请查收!
2019/07/18 职场文书
html+css实现赛博朋克风格按钮
2021/05/26 HTML / CSS