(cid的值是否在AR类对应的id属性中存在,使用场景:当前AR模型关联的数据表的cid字段和Category模型关联的数据表的id字段相关联,所以使用该验证规则验证cid字段的值能否在关联的另一个数据表中找到对应记录)
targetClass:用于查找输入值的目标AR类。
targetAttribute:用于查找输入值的目标属性名称。
filter:检查属性值存在性需要进行数据库查询,该参数设置查询的过滤条件。可以设置为查询条件的字符串或数组,或者function($query)匿名函数。
allowArray:是否允许输入值为数组,默认为false。若设置为true,则数组的每个元素都必须在目标字段中存在。若把targetAttribute设置为多元素数组来验证被测值在多字段中的存在性时,该属性不能设置为true。
(6)unique:唯一性。
['email', 'unique', 'targetClass' => 'app\models\User', 'message' => '{attribute}"{value}"已被注册!', 'on' => 'signup']
除了没有allowArray属性,其他属性都和exist验证器一样。
(7)in:范围。
['sex', 'in', 'range' => [0, 1, 2]]
range:范围值列表。
strict:是否使用严格模式(类型与值都要相同)。
not:是否对验证的结果取反,默认为false。
allowArray:是否接受输入数组,默认为false。
5. 文件验证器
(1)file:文件。
['pcImg', 'file', 'extensions' => ['png', 'jpg', 'gif'], 'maxSize' => 1024*1024]
extensions:可接受上传的文件扩展名列表。
mimeTypes:可接受上传的MIME类型列表。
minSize:文件大小下限。
maxSize:文件大小上限。
maxFiles:上传文件个数上限,默认为1。设置为大于1时输入值必须为数组。
checkExtensionByMimeType:是否通过文件的MIME类型来判断文件扩展,默认为true。
(2)image:图片。
['mbImg', 'image' extensions => 'png, ipg', 'minWidth' => 100, 'minHeight' => 100]
该验证器继承自file验证器,并支持额外属性minWidth、maxWidth、minHeight、maxHeight来设置图片的最小、最大宽度和最小、最大高度。
四、其他验证器
1. 条件式验证:
['state', 'required', 'when' => function($model) {//只在country属性值为'USA'的时候state属性值才不能为空 return $model->country=='USA'; }]
注:若需要支持客户端验证,则要配置'whenClient'属性。
1. 自定义验证器:
(1)行内验证器:一种以模型方法或匿名函数的形式定义的验证器。
示例:
['conpassword', function($attribute, $params) { if($this->$attribute != $this->newpassword) { $this->addError($attribute, '确认密码和新密码不一致!'); } }]。
(当然这里也可以使用yii核心验证器'compare'来实现)
注:行内验证器不支持客户端验证。
(2)独立验证器:
独立验证器是继承自yii\validators\Validator或其子类的类,可以通过重写validateAttribute()方法来实现验证规则,若验证失败,可以调用yii\base\Model::addError()方法来保存错误信息到模型内。
独立验证器示例:
namespace app\components; use yii\validators\Validator; class ConpasswordValidator extends Validator { public function init() { parent::init(); $this->message = '确认密码和密码不一致!'; } //服务器端验证 public function validateAttribute($model, $attribute) { if($model->conpassword !== $model->password) { $model->addError($attribute, $this->message); } } //客户端验证 public function clientValidateAttribute($model, $attribute, $view) { $conpassword = json_encode($model->conpassword); $message = json_encode($this->message, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE); return <<<JS if(value != $conpassword) { message.push($message); } JS; return false; } }
模型中使用示例:
['conpassword', 'app\components\ConpasswordValidator']
最后要注意,验证规则申明的先后顺序对验证结果也是有影响的!
更多关于Yii相关内容感兴趣的读者可查看本站专题:《Yii框架入门及常用技巧总结》、《php优秀开发框架总结》、《smarty模板入门基础教程》、《php面向对象程序设计入门教程》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》