关于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 相关文章推荐
一次编写,随处运行
Oct 09 PHP
smarty实例教程
Nov 19 PHP
通过php快速统计某个数据库中每张表的数据量
Sep 04 PHP
thinkphp3.0 模板中函数的使用
Nov 13 PHP
zf框架的registry(注册表)使用示例
Mar 13 PHP
一组PHP加密解密函数分享
Jun 05 PHP
Yii实现MySQL多数据库和读写分离实例分析
Dec 03 PHP
php基于session实现数据库交互的类实例
Aug 03 PHP
PHP getallheaders无法获取自定义头(headers)的问题
Mar 23 PHP
php parse_str() 函数的定义和用法
May 23 PHP
Yii2选项卡的简单使用
May 26 PHP
PHP数据分析引擎计算余弦相似度算法示例
Aug 08 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 empty函数 使用说明
2009/08/10 PHP
php代码运行时间查看类代码分享
2011/08/06 PHP
解析PHP中的正则表达式以及模式匹配
2013/06/19 PHP
ThinkPHP水印功能实现修复PNG透明水印并增加JPEG图片质量可调整
2014/11/05 PHP
浅谈PHP中JSON数据操作
2015/07/01 PHP
LaravelS通过Swoole加速Laravel/Lumen详解
2018/03/02 PHP
解决Laravel自定义类引入和命名空间的问题
2019/10/15 PHP
jquery.jstree 增加节点的双击事件代码
2010/07/27 Javascript
javascript textarea光标定位方法(兼容IE和FF)
2011/03/12 Javascript
JavaScript移除数组内重复元素的方法
2015/03/18 Javascript
JavaScript中的数据类型转换方法小结
2015/10/26 Javascript
JavaScript的函数式编程基础指南
2016/03/19 Javascript
Angular.js ng-file-upload结合springMVC的使用教程
2017/07/10 Javascript
基于js中的存储键值对以及注意事项介绍
2018/03/30 Javascript
Laravel admin实现消息提醒、播放音频功能
2019/07/10 Javascript
Vue使用mixin分发组件的可复用功能
2019/09/01 Javascript
Python threading多线程编程实例
2014/09/18 Python
一些常用的Python爬虫技巧汇总
2016/09/28 Python
解决python字典对值(值为列表)赋值出现重复的问题
2019/01/20 Python
python函数局部变量、全局变量、递归知识点总结
2019/11/15 Python
Python3 中作为一等对象的函数解析
2019/12/11 Python
完美解决pyinstaller打包报错找不到依赖pypiwin32或pywin32-ctypes的错误
2020/04/01 Python
python实现画图工具
2020/08/27 Python
UI自动化定位常用实现方法代码示例
2020/10/27 Python
英国领先的男装设计师服装购物网站:Mainline Menswear
2018/02/04 全球购物
香港百佳网上超级市场:PARKNSHOP.com
2020/06/10 全球购物
Linux Interview Questions For software testers
2013/05/17 面试题
运动会解说词50字
2014/01/18 职场文书
教师竞聘演讲稿
2014/05/16 职场文书
我为党旗添光彩演讲稿
2014/09/10 职场文书
2015年财务人员个人工作总结
2015/07/27 职场文书
请病假条范文
2015/08/17 职场文书
2019年消防宣传标语集锦
2019/11/21 职场文书
世界十大儿童漫画书排名,法国国宝漫画排第五,第二是轰动日本连环
2022/03/18 欧美动漫
详解OpenCV获取高动态范围(HDR)成像
2022/04/29 Python
戴尔Win11系统no bootable devices found解决教程
2022/09/23 数码科技