关于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
基于mysql的论坛(5)
Oct 09 PHP
PHP5.3的垃圾回收机制(动态存储分配方案)深入理解
Dec 10 PHP
php自定义函数实现JS的escape的方法示例
Jul 07 PHP
postfixadmin忘记密码后的修改密码方法详解
Jul 20 PHP
如何使用PHP给图片加水印
Oct 12 PHP
php可变长参数处理函数详解
Feb 22 PHP
thinkPHP5.0框架安装教程
Mar 25 PHP
PHP利用二叉堆实现TopK-算法的方法详解
Apr 24 PHP
浅谈PHP中pack、unpack的详细用法
Mar 12 PHP
PHP chunk_split()函数讲解
Feb 12 PHP
PHP从零开始打造自己的MVC框架之入口文件实现方法详解
Jun 03 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程序的php代码
2008/04/07 PHP
设置php页面编码的两种方法示例介绍
2014/03/03 PHP
PHP实现HTML页面静态化的方法
2015/11/04 PHP
PHP实现QQ、微信和支付宝三合一收款码实例代码
2018/02/19 PHP
实例介绍PHP删除数组中的重复元素
2019/03/03 PHP
JavaScript中的稀疏数组与密集数组[译]
2012/09/17 Javascript
javascript继承之为什么要继承
2012/11/10 Javascript
JqueryMobile动态生成listView并实现刷新的两种方法
2014/03/05 Javascript
jQuery实现鼠标可拖动调整表格列宽度
2014/05/26 Javascript
JS+CSS实现可拖动的弹出提示框
2015/02/16 Javascript
深入理解JavaScript系列(50):Function模式(下篇)
2015/03/04 Javascript
JavaScript简单遍历DOM对象所有属性的实现方法
2015/10/21 Javascript
利用jQuery实现CheckBox全选/全不选/反选的简单代码
2016/05/31 Javascript
ES6中Proxy代理用法实例浅析
2017/04/06 Javascript
深入学习nodejs中的async模块的使用方法
2017/07/12 NodeJs
详解JS函数stack size计算方法
2018/06/18 Javascript
element-ui使用导航栏跳转路由的用法详解
2018/08/22 Javascript
怎么使用javascript深度拷贝一个数组
2019/06/06 Javascript
mock.js模拟数据实现前后端分离
2019/07/24 Javascript
vue实现滑动超出指定距离回顶部功能
2019/07/31 Javascript
vue实现吸顶、锚点和滚动高亮按钮效果
2019/10/21 Javascript
Vue 3自定义指令开发的相关总结
2021/01/29 Vue.js
代码块高亮可复制显示js插件highlight.js+clipboard.js整合
2021/02/15 Javascript
[49:27]2018DOTA2亚洲邀请赛 4.4 淘汰赛 TNC vs VG 第一场
2018/04/05 DOTA
python实现将html表格转换成CSV文件的方法
2015/06/28 Python
Python操作mysql数据库实现增删查改功能的方法
2018/01/15 Python
科颜氏法国官网:Kiehl’s法国
2019/08/20 全球购物
股东合作协议书范本
2014/04/14 职场文书
财务会计专业求职信
2014/06/09 职场文书
应届毕业生求职信范文
2014/07/07 职场文书
环境科学专业教师求职信
2014/07/12 职场文书
党员教师四风自我剖析材料
2014/09/30 职场文书
2014乡镇机关党员个人对照检查材料思想汇报
2014/10/09 职场文书
2014年打非治违工作总结
2014/11/13 职场文书
2015年宣传思想工作总结
2015/05/22 职场文书
JS + HTML 罗盘式时钟的实现
2021/05/21 Javascript