关于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 zlib扩展实现页面GZIP压缩输出
Jun 17 PHP
php XPath对XML文件查找及修改实现代码
Jul 27 PHP
Window下PHP三种运行方式图文详解
Jun 11 PHP
PHP连接和操作MySQL数据库基础教程
Sep 29 PHP
thinkphp获取栏目和文章当前位置的方法
Oct 29 PHP
php判断用户是否手机访问代码
Jun 08 PHP
以文件形式缓存php变量的方法
Jun 26 PHP
PHP下使用mysqli的函数连接mysql出现warning: mysqli::real_connect(): (hy000/1040): ...
Feb 14 PHP
PHP实现的常规正则验证helper公共类完整实例
Apr 27 PHP
详解php中的implements 使用
Jun 13 PHP
PHP实现字符串翻转功能的方法【递归与循环算法】
Nov 03 PHP
详解laravel passport OAuth2.0的4种模式
Nov 04 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
福利彩票幸运号码自动生成器
2006/10/09 PHP
在smarty模板中使用PHP函数的方法
2011/04/23 PHP
apache+php完美解决301重定向的两种方法
2011/06/08 PHP
php 中英文语言转换类代码
2011/08/11 PHP
19个Android常用工具类汇总
2014/12/30 PHP
php输出指定时间以前时间格式的方法
2015/03/21 PHP
typecho插件编写教程(四):插件挂载
2015/05/28 PHP
PHP7基于curl实现的上传图片功能
2018/05/11 PHP
thinkPHP框架实现的简单计算器示例
2018/12/07 PHP
php使用自带dom扩展进行元素匹配的原理解析
2020/05/29 PHP
JavaScript中两种链式调用实现代码
2011/01/12 Javascript
百度地图api应用标注地理位置信息(js版)
2013/02/01 Javascript
java与javascript之间json格式数据互转介绍
2013/10/29 Javascript
jquery.post用法关于type设置问题补充
2014/01/03 Javascript
javascript实现在指定元素中垂直水平居中
2015/09/13 Javascript
js实现常用排序算法
2016/08/09 Javascript
Angularjs单选改为多选的开发过程及问题解析
2017/02/17 Javascript
JavaScript中undefined和null的区别
2017/05/03 Javascript
详解Vue单元测试case写法
2018/05/24 Javascript
JS基于Location实现访问Url、重定向及刷新页面的方法分析
2018/12/03 Javascript
JointJS流程图的绘制方法
2018/12/03 Javascript
JavaScript常见事件处理程序实例总结
2019/01/05 Javascript
python3.3使用tkinter开发猜数字游戏示例
2014/03/14 Python
Python的Flask框架中实现登录用户的个人资料和头像的教程
2015/04/20 Python
Python可变参数用法实例分析
2017/04/02 Python
Django数据库操作的实例(增删改查)
2017/09/04 Python
python算法与数据结构之单链表的实现代码
2019/06/27 Python
python之pexpect实现自动交互的例子
2019/07/25 Python
AT&T Wireless:手机、无限数据计划和配件
2018/06/03 全球购物
优秀的2014年两会精神解读
2014/03/17 职场文书
乒乓球兴趣小组活动总结
2014/07/08 职场文书
小学领导班子对照材料
2014/08/23 职场文书
格林童话读书笔记
2015/06/30 职场文书
一个家长教育孩子的心得体会
2016/01/15 职场文书
python模块与C和C++动态库相互调用实现过程示例
2021/11/02 Python
ubuntu20.04虚拟机无法上网的问题及解决
2022/12/24 Servers