风一样的回忆

新浪微薄腾讯微薄

最新碎语:最近开始学习俄语!!!

您的位置:风一样的回忆 >Yii专栏> Yii2 独立客户端验证器实现

Yii2 独立客户端验证器实现

为了创建一个支持客户端验证的验证器,你应该实现 yii\validators\Validator::clientValidateAttribute() 方法,该方法返回一段 JavaScript 代码 用来在客户端执行验证。在这段 JavaScript 代码里,你可以使用下面几个 预定义的变量:


  • attribute:被验证的属性名。

  • value:被验证的值。

  • messages:一个给属性保存验证错误信息的数组。

  • deferred:一个支持添加 deferred 对象的数组(下一部分再说)。

下面的例子,我们创建了一个 StatusValidator 验证器,它用来验证一个输入和存在的状态相比, 是否是有效的状态输入。这个验证器支持服务端验证也支持客户端验证。

namespace app\components;
use yii\validators\Validator;
use app\models\Status;
class StatusValidator extends Validator{    
    public function init()
    {        
        parent::init();        
        $this->message = 'Invalid status input.';
    }    
    public function validateAttribute($model, $attribute)
    {        
        $value = $model->$attribute;        
        if (!Status::find()->where(['id' => $value])->exists()) {            
            $model->addError($attribute, $this->message);
        }
    }    
    public function clientValidateAttribute($model, $attribute, $view)
    {        
       $statuses = json_encode(Status::find()->select('id')->asArray()->column());
       $message = json_encode($this->message, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE); 
       return <<<JS
       if ($.inArray(value, $statuses) === -1) {
            messages.push($message);
        }
        JS;
        } 
   }
}

使用的时候:

public function rules()
{
    return [
        ...
        ['kind_ids', 'app\components\StatusValidator'], // 自定义验证
        ...
    ];
}


---

转载请注明本文标题和链接:《Yii2 独立客户端验证器实现

分享到:

发表评论

路人甲 表情
看不清楚?点图切换 Ctrl+Enter快速提交