yii2 的校验规则在 vendor\yiisoft\yii2\validators中 yii2 的验证器名称存在于 vendor\yiisoft\yii2\validators\Validator.php
可用验证器
可以使用的验证器的名字为 此数组的键
<?phppublic 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',];
使用示例
<?phppublic function rules(){return [// email 属性必须是一个有效的电子邮箱地址['email', 'email'],];}
自定义校验器
在实际开发中有一些场景,在当前系统自带校验器下无法满足,需要自定义校验规则。
<?phpclass 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, '请提供 [发货单号] 或者 [某物流单号]');}}}
