Yii2 自定义独立验证器

技巧库 · forecho · 于 3年前 发布 · 7409 次阅读

新建一个文件:

<?php
/**
 * author     : forecho <caizhenghai@gmail.com>
 * createTime : 2015/7/1 14:54
 * description:
 */

namespace common\helps;


use yii\validators\Validator;

class ArrayValidator extends Validator
{

    public function validateAttribute($model, $attribute)
    {
        if (!is_array($model->$attribute)) {
            $this->addError($model, $attribute, $attribute . '必须是一个数组');
        }
    }
}

使用的时候:

public function rules()
{
    return [
        ...
        ['kind_ids', 'common\helps\ArrayValidator'], // 自定义验证
        ...
    ];
}

参考:http://stackoverflow.com/questions/28313696/yii2-class-validator-does-not-exist


如果这篇文章对您有帮助,不妨微信小额赞助我一下,让我有动力继续写出高质量的教程。

共收到 1 条回复 Yii2基本用法
forecho#14个月前 0 个赞

model 内函数验证,参考代码:

use yii\base\Model;

class MyForm extends Model
{
    public $country;
    public $token;

    public function rules()
    {
        return [
            // an inline validator defined as the model method validateCountry()
            ['country', 'validateCountry'],

            // an inline validator defined as an anonymous function
            ['token', function ($attribute, $params, $validator) {
                if (!ctype_alnum($this->$attribute)) {
                    $this->addError($attribute, 'The token must contain letters or digits.');
                }
            }],
        ];
    }

    public function validateCountry($attribute, $params, $validator)
    {
        if (!in_array($this->$attribute, ['USA', 'Indonesia'])) {
            $this->addError($attribute, 'The country must be either "USA" or "Indonesia".');
        }
    }
}

来源:https://www.yiiframework.com/doc/guide/2.0/en/input-validation#creating-validators

添加回复 (需要登录)
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册