当前位置: 首页 > news >正文

Yii2.0 模型规则(rules)详解

一、基本语法结构

public function rules()
{return [// 规则1[['attribute1', 'attribute2'], 'validator', 'options' => value, ...],// 规则2['attribute', 'validator', 'options' => value, ...],// 规则3...];
}

二、规则类型分类

1、核心验证器(内置验证器)

格式验证类:

  • boolean:验证是否为布尔值
  • email:验证是否为有效邮箱格式
  • string:验证是否为字符串
  • number:验证是否为数字
  • double:验证是否为浮点数
  • integer:验证是否为整数
  • date:验证是否为日期格式
  • time:验证是否为时间格式
  • datetime:验证是否为日期时间格式
  • url:验证是否为有效URL
['email', 'email'],
['age', 'integer'],
['website', 'url', 'defaultScheme' => 'http'],

范围验证类:

  • in:验证是否在给定列表
  • notIn:验证值是否不在给定列表中
  • range:验证数值是否在范围内
  • compare:比较两个属性的值
['status', 'in', 'range' => [1, 2, 3]],
['priority', 'compare', 'compareValue' => 10, 'operator' => '>='],

存在性验证:

  • required: 验证是否为必填
  • default:验证默认值(非严格验证)
  • exist:验证值是否存在与数据库中
  • unique:验证值在数据库中是否唯一
[['username', 'password'], 'required'],
['category_id', 'exist', 'targetClass' => Category::class, 'targetAttribute' => 'id'],
['email', 'unique', 'targetClass' => User::class],

其他验证:

  • filter: 数据过滤
  • match:正则表达式验证
  • trim:去除首尾空格
  • safe:标记属性为安全(不验证)
['username', 'match', 'pattern' => '/^[a-z]\w*$/i'],
['content', 'filter', 'filter' => 'strip_tags'],
['auth_key', 'default', 'value' => Yii::$app->security->generateRandomString()],

2、行内验证器

在模型内部定义方法

public function rules()
{return [['password', 'validatePassword'],];
}public function validatePassword($attribute, $params)
{if (strlen($this->$attribute) < 8) {$this->addError($attribute, '密码长度不能少于8个字符');}
}

3、匿名函数验证器

public function rules()
{return [['agree', function($attribute, $params) {if ($this->$attribute != 1) {$this->addError($attribute, '必须同意条款');}}],];
}

三、高级规则配置

1、条件验证(when)

['state', 'required', 'when' => function($model) {return $model->country == 'USA';
}],

2、客户端验证

['captcha', 'captcha', 'captchaAction' => 'site/captcha', 'skipOnEmpty' => false],

3、指定场景验证(on/except)

['password', 'required', 'on' => 'register'],
['email', 'required', 'except' => 'guest'],

4、空值处理

['description', 'default', 'value' => null], // 允许为空
['status', 'required', 'skipOnEmpty' => false], // 不允许空字符串

四、规则选项详解

通用选项

选项说明示例解释用法结果
message定义错误信息‘message’=> ‘{attribute}不能为空’{attribute}为占位符[[‘username’, ‘password’], ‘required’, ‘message’=> ‘{attribute}不能为空’]username不能为空或者password不能为空
skipOnEmpty为空时是否跳过验证‘skipOnEmpty’ => true
skipOnError当属性已有错误时是否跳过‘skipOnError’ => true
when条件验证回调‘when’ => function($model) { … }
on适用场景‘on’ => [‘create’, ‘update’]
except排除场景‘except’ => ‘delete’

相关文章:

Yii2.0 模型规则(rules)详解

一、基本语法结构 public function rules() {return [// 规则1[[attribute1, attribute2], validator, options > value, ...],// 规则2[attribute, validator, options > value, ...],// 规则3...]; }二、规则类型分类 1、核心验证器&#xff08;内置验证器&#xff0…...

Notepad++中XML格式化插件介绍

Notepad++中XML格式化插件介绍 背景安装指南安装步骤验证安装成功安装失败可尝试使用说明XML文件格式正确时格式化错误格式检查XML Tools插件核心功能盘点常见问题格式化后没变化中文显示乱码拯救杂乱XML格式!Notepad++这个神器插件,必须接收!背景 接手别人写的XML,缩进乱成…...

在 R 中,清除包含 NA(缺失值)的数据

在 R 中&#xff0c;清除包含 NA&#xff08;缺失值&#xff09;的数据可以通过多种方式实现&#xff0c;具体取决于你希望如何处理这些缺失值。以下是几种常见的方法&#xff0c;包括删除包含 NA 的行、删除包含 NA 的列&#xff0c;或者用特定值填充 NA。 1. 删除包含 NA 的…...

Linux复习笔记(一)基础命令和操作

遇到的问题&#xff0c;都有解决方案&#xff0c;希望我的博客能为你提供一点帮助。 一、Linux中的基础命令和操作&#xff08;约30%-40%) 1.用户和组&#xff08;5%左右&#xff09; 1.1用户简介&#xff08;了解&#xff09; 要求&#xff1a;了解&#xff0c;知道有三个用户…...

多线程的出现解决了什么问题?深入解析多线程的核心价值

多线程的出现解决了什么问题?深入解析多线程的核心价值 1. 引言 在计算机科学中,多线程(Multithreading) 是一种重要的并发编程技术,它允许一个进程同时执行多个任务,从而提高程序的性能和响应能力。那么,多线程究竟是为了解决哪些问题而诞生的?它的核心价值是什么?…...

java集合菜鸟教程

1、Java集合的分类 1Java中的集合类可以分为两大类&#xff1a; &#xff08;1&#xff09;实现Collection接口&#xff0c;Collection是一个基本的集合接口&#xff0c;Collection中可以容纳一组集合元素&#xff08;Element&#xff09;&#xff0c;图1是Collection与子类的…...

体育培训的实验室管理痛点 质检LIMS如何重构体育检测价值链

在竞技体育与全民健身并行的时代背景下&#xff0c;体育培训机构正面临双重挑战&#xff1a;既要通过科学训练提升学员竞技水平&#xff0c;又需严格把控运动安全风险。作为实验室数字化管理的核心工具&#xff0c;质检LIMS系统凭借其标准化流程管控与智能化数据分析能力&#…...

3、食品包装控制系统 - /自动化与控制组件/food-packaging-control

76个工业组件库示例汇总 食品包装线控制系统 这是一个用于食品包装线控制系统的自定义组件&#xff0c;提供了食品包装生产线的可视化监控与控制界面。组件采用工业风格设计&#xff0c;包含生产流程控制、实时数据监控和逻辑编程三个主要功能区域。 功能特点 工业风格UI设…...

AbMole的Calcein-AM/PI细胞双染试剂盒,精准区分细胞活死状态

在细胞生物学研究中&#xff0c;细胞活性检测是基础且关键的实验环节。然而&#xff0c;传统方法在检测活细胞和死细胞时常常面临诸多挑战&#xff1a;例如&#xff0c;检测过程复杂、耗时&#xff0c;容易受到细胞类型和实验条件的限制&#xff1b;荧光信号不稳定&#xff0c;…...

力扣刷题Day 37:LRU 缓存(146)

1.题目描述 2.思路 方法1&#xff1a;直接用Python封装好的数据结构OrderedDict&#xff08;兼具哈希表与双向链表的数据结构&#xff09;。 方法2&#xff1a;哈希表辅以双向链表。 3.代码&#xff08;Python3&#xff09; 方法1&#xff1a; class LRUCache(collections…...

动态规划之01背包——三道题助你理解01背包

目录 二维数组实现 一维数组实现 例一P1164 小A点菜 P1048 [NOIP 2005 普及组] 采药 P1802 5 倍经验日 首先做动规很好的一个办法就是卡哥提出的动规五部曲个人觉得很好用 确定dp数组&#xff08;dp table&#xff09;以及下标的含义 确定递推公式 dp数组如何初始化 确定遍…...

【前端笔记】CSS 选择器的常见用法

目录 1. CSS 的基本语法规范2. CSS 的引入方式3. CSS 选择器的种类3.1 标签选择器3.2 类选择器3.3 id 选择器3.4 复合选择器3.5 通配符选择器 4. 补充内容 1. CSS 的基本语法规范 选择器 {1 条 / n 条声明} 选择器决定的是修改谁声明决定的是怎么修改声明的属性是键值对&…...

电脑桌面悬浮窗便签,好用的电脑桌面便签工具

不知道大家有没有发现&#xff0c;我们每天要处理的事情越来越多&#xff1a;工作会议、项目截止日期、临时灵感、购物清单...光靠大脑记忆显然不够靠谱。你可能试过用手机备忘录&#xff0c;但工作时频繁切换设备又很影响效率。 这时候&#xff0c;一款好用的电脑桌面便签工具…...

Windows环境下maven的安装与配置

1.检查JAVA_HOME环境变量 Maven是使用java开发的&#xff0c;所以必须知道当前系统环境中的JDK的安装目录。 搜索栏直接输入“cmd” 或者 WinR 输入cmd 在打开的终端窗口输入“echo %JAVA_HOME”&#xff0c;就可以看到jdk的位置了。 如果没有的话&#xff0c;请参考我的文章&a…...

PyTorch 中如何针对 GPU 和 TPU 使用不同的处理方式

一个简单的矩阵乘法例子来演示在 PyTorch 中如何针对 GPU 和 TPU 使用不同的处理方式。 这个例子会展示核心的区别在于如何获取和指定计算设备&#xff0c;以及&#xff08;对于 TPU&#xff09;可能需要额外的库和同步操作。 示例代码&#xff1a; import torch import tim…...

数据库同步方案:构建企业数据流通的高速通道

在数字经济时代&#xff0c;数据已成为企业核心资产。根据Gartner统计&#xff0c;超过70%的企业因数据孤岛问题导致决策延迟&#xff0c;而高效可靠的数据库同步方案正是破解这一困局的关键技术。本文将深度解析数据库同步的核心逻辑、主流方案及实践策略&#xff0c;助企业构…...

微信小程序开发,登录注册实现

文章目录 1. 官方文档教程2. 注册实现3. 登录实现4. 关于作者其它项目视频教程介绍 1. 官方文档教程 https://developers.weixin.qq.com/miniprogram/dev/framework/路由跳转的几种方式&#xff1a; https://developers.weixin.qq.com/miniprogram/dev/api/route/wx.switchTab…...

VSCode怎么同时打开多个页面

VSCode中打开一个文件会把另一个文件覆盖&#xff0c;始终保持打开一个文件的状态&#xff0c;相对于其他IDE是不太习惯的&#xff0c;如果同时打开两个文件页面怎么去设置呢 1、禁用预览模式 2、快速分屏快捷键&#xff1a; Ctrl\ (Windows/Linux) 或 Cmd\ (macOS)...

【多种不同提交方式】通过springboot实现与前端网页数据交互(非常简洁快速)

【多种不同提交方式】通过springboot实现与前端网页数据交互 提示&#xff1a;帮帮志会陆续更新非常多的IT技术知识&#xff0c;希望分享的内容对您有用。本章分享的是springboot的使用。前后每一小节的内容是存在的有&#xff1a;学习and理解的关联性。【帮帮志系列文章】&am…...

Web 架构之负载均衡全解析

文章目录 一、引言二、思维导图三、负载均衡的定义与作用定义作用1. 提高可用性2. 增强性能3. 实现扩展性 四、负载均衡类型硬件负载均衡代表设备优缺点 软件负载均衡应用层负载均衡代表软件优缺点 网络层负载均衡代表软件优缺点 五、负载均衡算法轮询算法&#xff08;Round Ro…...

猫咪如厕检测与分类识别系统系列~进阶【一】视频流推流及网页实时展示

前情提要 家里养了三只猫咪&#xff0c;其中一只布偶猫经常出入厕所。但因为平时忙于学业&#xff0c;没法时刻关注牠的行为。我知道猫咪的如厕频率和时长与健康状况密切相关&#xff0c;频繁如厕可能是泌尿问题&#xff0c;停留过久也可能是便秘或不适。为了更科学地了解牠的如…...

DeepSeek全域智能革命:从量子纠缠到星际文明的认知跃迁引言:认知边界的坍缩与重构

一、认知架构的技术基石 1.1 混合专家系统的流形蒸馏 DeepSeek-R2的MoE架构采用微分流形蒸馏技术&#xff0c;将6710亿参数的教师模型&#xff08;如DeepSeek-Prover-V2&#xff09;的知识嵌入到动态路由网络中。通过辛几何约束下的参数投影&#xff0c;模型在保留数学证明能…...

Mkdocs页面如何嵌入PDF

嵌入PDF 嵌入PDF代码 &#xff0c;注意PDF的相对地址 <iframe src"../个人简历.pdf (相对地址)" width"100%" height"800px" style"border: 1px solid #ccc; overflow: auto;"></iframe>我的完整代码&#xff1a; <d…...

JS进阶DAY2 构造函数数据常用函数

深入对象 1.创建对象的三种方式 1.利用对象字面量创建对象 const o{ name:佩奇 } 2.利用 new Object 创建对象 const onew Object({ name:佩奇}) console.log(o) //{name:佩奇} 3.利用构造函数创建对象 2.构造函数 构造函数:是一种特殊的函数&#xff0c;主要用来初始…...

【ARM AMBA AHB 入门 3 -- AHB 总线介绍】

请阅读【ARM AMBA 总线 文章专栏导读】 文章目录 AHB Bus 简介AHB Bus 构成AHB BUS 工作机制AHB 传输阶段 AHB InterfacesAHB仲裁信号 AHB 数据访问零等待传输(no waitstatetransfer)等待传输(transfers with wait states)多重传送(multipletransfer)--Pipeline AHB 控制信号 A…...

计划评审技术PERT

计划评审技术&#xff08;Program Evaluation and Review Technique&#xff0c;PERT&#xff09;是一种用于项目管理和分析的工具&#xff0c;主要用于估算项目完成时间、识别关键路径以及评估项目进度风险。它最初是在20世纪50年代由美国海军开发的&#xff0c;用于管理复杂的…...

【Leetcode 每日一题 - 扩展】3342. 到达最后一个房间的最少时间 II

问题背景 有一个地窖&#xff0c;地窖中有 n m n \times m nm 个房间&#xff0c;它们呈网格状排布。 给你一个大小为 n m n \times m nm 的二维数组 m o v e T i m e moveTime moveTime&#xff0c;其中 m o v e T i m e [ i ] [ j ] moveTime[i][j] moveTime[i][j] 表…...

Linux57配置MYSQL YUM源

错了&#xff0c;弄错了下载地址 显示没MYSQL 刚才YUM包弄错了 下的是rpm文件 应该安装 通过yum install安装 .repo中的enabled需要修改 哪些能修改 哪些不改 配置特定软件的YUM仓库 nginx看教程有官方文档 将官方文档中YUM配置写入.repo文件然后yum clean all yum ma…...

Kafka是什么?典型应用场景有哪些? (消息队列、流处理平台;日志收集、实时分析、事件驱动架构等)

Kafka 核心解析与场景代码示例 一、Kafka核心概念 Apache Kafka 是分布式流处理平台&#xff0c;具备以下核心能力&#xff1a; 发布-订阅模型&#xff1a;支持多生产者/消费者并行处理持久化存储&#xff1a;消息默认保留7天&#xff08;可配置&#xff09;分区机制&#x…...

数据实验分析

数据分析数据分类与绘图数据分类方法&#xff1a;通过指定列名和函数&#xff08;如SUM&#xff09;来分类数据&#xff0c;确保数据集中包含所需列&#xff0c;否则会报错。嵌套柱形图应用&#xff1a;嵌套柱形图用于展示多层次分类的数据&#xff0c;如按店名和化妆品类别分类…...

PostgreSQL中“参数默认值实现伪重载“详解

什么是伪重载&#xff1f; "伪重载"指的是通过单一函数定义配合参数默认值和条件逻辑来模拟传统编程语言中方法重载的效果。与真正的函数重载&#xff08;PostgreSQL支持的多同名函数不同参数实现&#xff09;不同&#xff0c;伪重载是在一个函数内部处理不同参数组…...

在IDEA中编写Spark程序并运行

Spark是基于scala的&#xff0c;当然它也可以支持java和scala还有python语言&#xff0c;我们这里会使用scala。 1.在Idea中安装插件&#xff0c;使得Idea中可以编写scala代码。 2.使用Maven创建项目&#xff0c;并在pom.xml文件中配置相关的依赖。 3.设置maven依赖项。修改po…...

知识图谱:AI大脑中的“超级地图”如何炼成?

人类看到“苹果”一词&#xff0c;会瞬间联想到“iPhone”“乔布斯”“牛顿”&#xff0c;甚至“维生素C”——这种思维跳跃的背后&#xff0c;是大脑将概念连结成网的能力。而AI要模仿这种能力&#xff0c;需要一张动态的“数字地图”来存储和链接知识&#xff0c;这就是​知识…...

Facebook隐私设置详解:如何保护你的个人信息

在这个数字化时代&#xff0c;个人信息安全变得尤为重要。Facebook 作为全球最大的社交网络平台之一&#xff0c;拥有数十亿用户。然而&#xff0c;随着用户数量的增加&#xff0c;隐私问题也日益凸显。本文将详细介绍 Facebook 的隐私设置&#xff0c;帮助你更好地保护个人信息…...

【Hive入门】Hive数据导入与导出:批量操作与HDFS数据迁移完全指南

目录 引言 1 Hive数据导入概述 1.1 Hive数据导入方式分类 1.2 Hive数据模型与存储结构 2 LOAD DATA命令详解 2.1 基本语法与参数 2.2 LOAD DATA执行流程 2.3 案例分析 3 HDFS数据迁移技术 3.1 HDFS文件操作与Hive集成 3.2 外部表技术应用 3.3 分区表动态加载 4 性…...

深入浅出JSON:现代数据交换的基石

JSON&#xff08;JavaScript Object Notation&#xff09;已经成为当今互联网上最流行的数据交换格式之一。无论是Web API、配置文件还是NoSQL数据库&#xff0c;JSON都扮演着至关重要的角色。本文将带你全面了解JSON&#xff0c;从基础概念到高级应用。 什么是JSON&#xff1…...

C++ 日志系统实战第四步:设计与代码实现详解

全是通俗易懂的讲解&#xff0c;如果你本节之前的知识都掌握清楚&#xff0c;那就速速来看我的项目笔记吧~ 本文将加入项目代码编写&#xff01; 目录 日志系统框架设计 模块划分 模块关系图 代码设计 实用类设计 日志等级设计 日志消息类 日志输出格式 日志落地(L…...

DeepSeek API接口调用示例(开发语言C#,替换其中key值为自己的key值即可)

示例&#xff1a; DeepSeek官方接口说明文档&#xff1a;对话补全 | DeepSeek API Docs 官网暂未提供C#代码实现&#xff1a;&#xff08;以下为根据CURL接口C#代码调用&#xff09; using System; using System.Collections.Generic; using System.Linq; using System.Text; …...

PyTorch常用命令(可快速上手PyTorch的核心功能,涵盖从数据预处理到模型训练的全流程)

以下是PyTorch常用命令的分类整理&#xff0c;涵盖张量操作、模型构建、数据加载、训练流程等核心内容&#xff1a; 1. 张量操作 创建张量 x torch.tensor([1, 2, 3]) # 从数据创建 x torch.zeros(3, 3) # 全零张量 x torch.ones(3, 3) …...

软开错题(二)

SNMP的传输层协议是UDP Linux操作系统中通常使用apache作为web服务器&#xff0c;其默认的web站点的目录是 /var/www/html 归并排序不是原地排序 邻接表&#xff1a;包含n个头节点和e个表节点&#xff0c;其广度和深度遍历的时间复杂度都是O(ne) grant使用方式 grant 权限 …...

拉削丝锥,螺纹类加工的选择之一

在我们的日常生活中&#xff0c;螺纹连接无处不在&#xff0c;从简单的螺丝钉到复杂的机械设备&#xff0c;都离不开螺纹的精密加工。今天&#xff0c;给大家介绍一种的螺纹刀具——拉削丝锥&#xff1a; 一、拉削丝锥的工作原理 拉削丝锥&#xff0c;听起来有点陌生吧&#…...

【Python Number(数字)】

Python 中的数字类型是编程的基础元素&#xff0c;用于表示数值数据并进行数学运算。以下是 Python 数字类型的核心知识点&#xff1a; 一、基础数字类型 整数&#xff08;int&#xff09; 表示整数值&#xff0c;例如 42, -7, 0支持任意精度&#xff08;无大小限制&#xff09…...

​​大疆无人机SDR 链路​​

在大疆无人机或通信技术领域&#xff0c;​​SDR​​ 是 ​​Software-Defined Radio&#xff08;软件定义无线电&#xff09;​​ 的缩写&#xff0c;而 ​​SDR 链路​​ 指的是一种​​通过软件编程实现无线通信功能的技术链路​​。其核心是通过软件动态调整通信参数&#…...

linux基础学习--linux磁盘与文件管理系统

linux磁盘与文件管理系统 1.认识linux系统 1.1 磁盘组成与分区的复习 首先了解磁盘的物理组成,主要有: 圆形的碟片(主要记录数据的部分)。机械手臂,与在机械手臂上的磁头(可擦写碟片上的内容)。主轴马达,可以转动碟片,让机械手臂的磁头在碟片上读写数据。 数据存储…...

【Qt】Qt 构建系统详解:qmake 入门到项目实战

Qt 构建系统详解&#xff1a;qmake 入门到项目实战 本文将系统介绍 Qt 构建工具 qmake 的用法&#xff0c;并通过一个完整的项目结构示例&#xff0c;帮助你掌握 .pro 文件编写、子项目管理、模块依赖等核心技能。 &#x1f9ed; 一、什么是 qmake&#xff1f; qmake 是 Qt 提…...

Laravel 12 实现验证码功能

Laravel 12 实现验证码功能 在 Laravel 12 中实现验证码功能可以通过多种方式&#xff0c;以下是几种常见的方法&#xff1a; 方法一&#xff1a;使用 Captcha 包&#xff08;推荐&#xff09; 首先安装 mews/captcha 包&#xff1a; composer require mews/captcha发布配置…...

深入解析Http11AprProtocol:Tomcat高性能通信的底层原理

HTTP/1.1 协议作为 Web 通信的基础标准&#xff0c;其实现效率直接影响服务器性能。Apache Tomcat 作为 Java 生态中最流行的 Servlet 容器&#xff0c;提供了多种 HTTP 协议实现方案&#xff0c;其中基于 Apache Portable Runtime&#xff08;APR&#xff09;的 Http11AprProt…...

HTTP请求与缓存、页面渲染全流程

文章目录 前言**1. HTTP请求与缓存处理****缓存机制**• 强缓存&#xff08;Cache-Control / Expires&#xff09;• 协商缓存&#xff08;Last-Modified / ETag&#xff09; **2. 服务器响应与数据解析****3. HTML DOM 构建****4. CSSOM 构建****5. 渲染树&#xff08;Render …...

HTB - Eureka记录

HTB - Eurekahttps://mp.weixin.qq.com/s/r1WmZXNR6YkvnwP40liciA...

CentOS 7 基础环境安装脚本

&#x1f31f; CentOS 7 基础环境安装脚本使用文档 &#x1f9f0; 一键部署&#xff01;助你在 CentOS 7 系统上快速构建高效开发环境。 开源地址&#xff1a;https://github.com/hahaha-zsq/Shortcut-Script CentOS 7 基础环境安装脚本使用 &#x1f4e6; 项目结构一览 ./ ├…...