在Yii1.1中为模型添加表单验证规则需在rules()方法返回二维数组,每条规则含字段、验证器及参数;漏写required致空提交通过,漏写safe则非安全属性无法批量赋值。

在Yii1.1中为模型添加表单验证规则,需在模型类的rules()方法里返回一个二维数组,每条规则定义字段、验证器类型及可选参数;漏写required会导致空提交通过,漏写safe则非安全属性无法批量赋值。
基础验证规则写法
打开模型文件(如User.php),定位到rules()方法,在return语句的数组中添加规则项。
每条规则是一个索引数组:第一个元素是字段名(字符串或数组),第二个是验证器名称(字符串),后续为键值对形式的选项。
array('username, email', 'required') 表示 username 和 email 都必须填写;注意字段名之间用英文逗号+空格分隔,不能用中文顿号或换行。
验证器名称区分大小写,'email'有效,'Email'会报错找不到验证器类。
常用内置验证器示例
方法一:必填与长度限制
array('title', 'required', 'message' => '标题不能为空') —— 自定义错误提示比默认更明确。
array('content', 'length', 'min'=>10, 'max'=>500) —— 同时限制最小和最大长度,缺一不可;只写min不写max允许无限长,容易引发存储或 XSS 风险。
方法二:格式校验
array('email', 'email') —— 仅检查基本邮箱格式,不验证域名是否存在;生产环境建议配合前端+后端双重校验。
array('phone', 'match', 'pattern' => '/^1[3-9]\d{9}$/', 'message' => '手机号格式不正确') —— 正则必须用/开头结尾,且要转义反斜杠。
方法三:数值范围控制
array('age', 'numerical', 'integerOnly'=>true, 'min'=>0, 'max'=>120) —— 【integerOnly必须显式设为true才能拒绝小数】,否则3.5会被接受。
条件验证与场景控制
第一步:定义场景标识
在模型类顶部声明:const SCENARIO_REGISTER = 'register'; const SCENARIO_LOGIN = 'login';
第二步:在rules()中按场景分配规则
array('password', 'required', 'on'=>'register') —— 仅注册时强制密码必填;登录场景下该字段不参与此规则校验。
array('rememberMe', 'boolean', 'on'=>'login') —— 【rememberMe字段必须出现在safe规则中,否则$model->attributes = $_POST无法赋值】
第三步:控制器中激活场景
$model->scenario = User::SCENARIO_REGISTER; 或 $model->setScenario('register'); —— 这一步不做,所有on条件规则都不生效。
自定义验证方法
在模型类中新增一个公共方法,命名以validate开头,例如validatePasswordStrength()。
方法体内用$this->addError('password', '密码强度不足'); 添加错误信息。
在rules()中引用:array('password', 'validatePasswordStrength') —— 不加括号,不带$this->,Yii会自动调用。
注意:自定义方法必须是public,且参数列表为空;若传参会导致调用失败且无报错提示。


















