yii2 的校验规则在 vendor\yiisoft\yii2\validators中 yii2 的验证器名称存在于 vendor\yiisoft\yii2\validators\Validator.php
可用验证器
可以使用的验证器的名字为 此数组的键
<?php
public static $builtInValidators = [
'boolean' => 'yii\validators\BooleanValidator',
'captcha' => 'yii\captcha\CaptchaValidator',
'compare' => 'yii\validators\CompareValidator',
'date' => 'yii\validators\DateValidator',
'datetime' => [
'class' => 'yii\validators\DateValidator',
'type' => DateValidator::TYPE_DATETIME,
],
'time' => [
'class' => 'yii\validators\DateValidator',
'type' => DateValidator::TYPE_TIME,
],
'default' => 'yii\validators\DefaultValueValidator',
'double' => 'yii\validators\NumberValidator',
'each' => 'yii\validators\EachValidator',
'email' => 'yii\validators\EmailValidator',
'exist' => 'yii\validators\ExistValidator',
'file' => 'yii\validators\FileValidator',
'filter' => 'yii\validators\FilterValidator',
'image' => 'yii\validators\ImageValidator',
'in' => 'yii\validators\RangeValidator',
'integer' => [
'class' => 'yii\validators\NumberValidator',
'integerOnly' => true,
],
'match' => 'yii\validators\RegularExpressionValidator',
'number' => 'yii\validators\NumberValidator',
'required' => 'yii\validators\RequiredValidator',
'safe' => 'yii\validators\SafeValidator',
'string' => 'yii\validators\StringValidator',
'trim' => [
'class' => 'yii\validators\FilterValidator',
'filter' => 'trim',
'skipOnArray' => true,
],
'unique' => 'yii\validators\UniqueValidator',
'url' => 'yii\validators\UrlValidator',
'ip' => 'yii\validators\IpValidator',
];
使用示例
<?php
public function rules()
{
return [
// email 属性必须是一个有效的电子邮箱地址
['email', 'email'],
];
}
自定义校验器
在实际开发中有一些场景,在当前系统自带校验器下无法满足,需要自定义校验规则。
<?php
class XXXOpenMapForm extends Model
{
// 商城物流单号
public $delivery_sn;
// 某物流发货单号
public $express_sn;
public function rules ()
{
$rules = [];
// eitherRequired 自定义校验器
$rules[] = Model::addRule('delivery_sn', 'eitherRequired');
return $rules;
}
public function attributeLabels ()
{
return [
'delivery_sn' => '发货单号',
'express_sn' => '某物流单号'
];
}
/**
* 自定义校验器
* 作用:需要 delivery_sn 和 express_sn 至少传一个
*
* @param string $attribute
* @param array $params
*/
public function eitherRequired ($attribute, $params)
{
if(empty($this->delivery_sn) && empty($this->express_sn))
{
$this->addError($attribute, '请提供 [发货单号] 或者 [某物流单号]');
}
}
}