Yii2常用规则
你想了解 Yii2 框架中最常用的验证规则(Validation Rules),这是 Yii2 开发中表单验证和数据校验的核心部分。我会为你梳理最常用的规则,并提供清晰的示例和解释,方便你在实际开发中直接使用。 ### Yii2 核心验证规则详解 Yii2 的验证规则主要定义在模型(Model)的 `rules()` 方法中,格式为: ```php [['字段名1', '字段名2'], '验证器类型', '属性名' => '属性值', 'message' => '自定义错误提示'], ``` 以下是开发中最常用的验证规则,按使用频率排序: #### 1. 必填项验证(required) 最基础的规则,确保字段不能为空。 ```php [['username', 'email'], 'required', 'message' => '{attribute}不能为空'], ``` - `{attribute}` 会自动替换为字段的标签名(通过 `attributeLabels()` 定义) - 可选参数:`requiredValue`(指定必须等于某个值)、`strict`(严格类型匹配) #### 2. 字符串验证(string) 校验字段为字符串类型,并可限制长度。 ```php // 基础用法:仅验证类型 [['username'], 'string'], // 限制长度 [['username'], 'string', 'min' => 2, 'max' => 20, 'message' => '用户名长度必须在2-20位之间'], // 仅限制最大长度 [['remark'], 'string', 'max' => 500], ``` #### 3. 邮箱验证(email) 校验邮箱格式的合法性。 ```php [['email'], 'email', 'message' => '邮箱格式不正确'], ``` - 可选参数:`allowName`(是否允许邮箱包含名称,如 `张三 <zhangsan@example.com>`,默认 false) #### 4. 数值验证(integer/number) - `integer`:校验整数 - `number`:校验浮点数/数字 ```php // 整数验证(如年龄、数量) [['age', 'phone'], 'integer', 'min' => 0, 'max' => 120, 'message' => '年龄必须是0-120之间的整数'], // 数字验证(如价格、分数) [['price'], 'number', 'min' => 0.01, 'max' => 999999.99, 'message' => '价格必须是0.01-999999.99之间的数字'], ``` #### 5. 正则验证(match) 通过正则表达式自定义校验规则(如手机号、身份证、密码复杂度)。 ```php // 手机号验证(国内11位手机号) [['phone'], 'match', 'pattern' => '/^1[3-9]\d{9}$/', 'message' => '手机号格式不正确'], // 密码复杂度(至少8位,包含字母和数字) [['password'], 'match', 'pattern' => '/^(?=.*[a-zA-Z])(?=.*\d).{8,}$/', 'message' => '密码至少8位,需包含字母和数字'], ``` #### 6. 唯一值验证(unique) 确保字段值在数据库中唯一(如用户名、邮箱)。 ```php // 基础用法:校验当前表的字段唯一 [['username'], 'unique', 'message' => '用户名已存在'], // 高级用法:指定表、字段,或排除当前记录(更新时) [['email'], 'unique', 'targetClass' => User::class, // 指定模型(表) 'targetAttribute' => 'email', // 指定校验的字段 'filter' => function ($query) { // 更新时排除当前记录 if (!$this->isNewRecord) { $query->andWhere(['!=', 'id', $this->id]); } }, 'message' => '邮箱已被占用' ], ``` #### 7. 比较验证(compare) 校验字段值与另一个值/字段相等(如确认密码)。 ```php // 确认密码(与password字段对比) [['repassword'], 'compare', 'compareAttribute' => 'password', 'message' => '两次密码不一致'], // 对比固定值(如同意协议) [['agree'], 'compare', 'compareValue' => 1, 'message' => '请同意用户协议'], ``` #### 8. 日期验证(date) 校验日期格式,支持转换为时间戳。 ```php // 基础日期验证 [['birthday'], 'date', 'format' => 'yyyy-MM-dd', 'message' => '出生日期格式不正确'], // 转换为时间戳(自动赋值到birthday_time字段) [['birthday'], 'date', 'format' => 'yyyy-MM-dd', 'timestampAttribute' => 'birthday_time'], ``` #### 9. 图片/文件验证(image/file) 上传文件/图片的校验。 ```php // 图片验证(限制格式、大小) [['avatar'], 'image', 'extensions' => ['png', 'jpg', 'jpeg', 'gif'], // 允许的格式 'maxSize' => 2 * 1024 * 1024, // 最大2MB 'message' => '头像仅支持png/jpg/jpeg/gif,大小不超过2MB' ], // 通用文件验证 [['file'], 'file', 'extensions' => ['pdf', 'doc', 'docx'], 'maxSize' => 10 * 1024 * 1024, // 最大10MB ], ``` #### 10. 自定义验证(validator) 通过自定义方法实现复杂校验逻辑。 ```php // 定义规则 [['start_time', 'end_time'], 'validateTimeRange'], // 自定义验证方法 public function validateTimeRange($attribute, $params) { if ($this->start_time >= $this->end_time) { $this->addError('end_time', '结束时间必须晚于开始时间'); } } ``` ### 规则的通用属性 所有规则都支持以下通用参数,提升灵活性: 1. `on`:指定规则生效的场景(如 `['create', 'update']`) ```php [['password'], 'required', 'on' => 'create'], // 仅创建时校验密码必填 ``` 2. `skipOnEmpty`:是否为空时跳过验证(默认true,`required` 规则除外) 3. `skipOnError`:字段已有错误时是否跳过(默认true) 4. `message`:自定义错误提示语 ### 总结 1. **核心规则**:`required`(必填)、`string`(字符串)、`email`(邮箱)、`integer/number`(数值)是最基础且高频的验证规则,适用于大部分表单场景。 2. **业务规则**:`unique`(唯一)、`compare`(对比)、`match`(正则)是处理业务逻辑(如用户名唯一、密码确认)的核心规则。 3. **扩展规则**:`image/file`(文件)、`date`(日期)、自定义验证可满足特殊场景需求,结合 `on` 场景参数可灵活控制规则生效时机。 这些规则基本覆盖了 Yii2 日常开发中 90% 以上的验证需求,你可以直接复制示例代码到模型的 `rules()` 方法中,根据业务调整参数即可。
本文来源网络或会员投稿,版权归原作者所有,不代表本站立场。如因作品内容、版权等存在问题,请联系本站删除。
原文链接:https://www.chqiye.com/news/316.html
关注公众号
获取更多精彩内容