请问独立验证器支持客户端验证该怎么写呢? [ 未指定版本 ]
如下图所示,我是按照官网上介绍的,独立验证器支持客户端验证,但是返回JS代码这样写不对,报错了,有哪位同学知道的可以告诉我该怎么写呢?谢谢!
另外,行内验证器为什么无法支持客户端验证呢?
最佳答案
-
//实例:客户端验证器
文件位置:
\advanced\frontend\components\validators\StatusValidator.php<?php namespace frontend\components\validators; use yii\validators\Validator; use frontend\models\Validator as v; class StatusValidator extends Validator{ public function init(){ parent::init(); $this->message = '无效状态'; } public function validateAttribute($model, $attribute){ $value = $model->$attribute; if(!in_array($value,v::status())){ $model->addError($attribute, $this->message); } } public function clientValidateAttribute($model, $attribute, $view){ /* 预定义的变量(可直接在JavaScript中引用): attribute:正在被验证的属性名称 value:正在被验证的值 messages:一个数组,记录了与输入项对应的验证错误信息 deferred:一个数组,可以推入的推迟数组 */ $statuses = json_encode(v::status()); $message = json_encode($this->message, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE); return <<<JS if ($.inArray(value, $statuses) === -1) { messages.push($message); } JS; } }
文件位置:
\advanced\frontend\views\post\validator.php$form = ActiveForm::begin([ 'enableClientValidation'=>true, ]); <?= $form->field($model, 'selectedDefault')->textInput(); ?>
文件位置:
\advanced\frontend\models\Validator.php<? public function rules(){ return [ ['selectedDefault',StatusValidator::className()], ]; } public static function status(){ return ['ok','active','offline','online']; } <?
共 1 条回复
其他 3 个回答
-
-
echo '<script>...</script>'; return false;
共 1 条回复public function clientValidateAttribute($model, $attribute, $view) {
$okay = $model->conpassword==$model->password ? 1 : 0; $message = json_encode($this->message); $str = '<script>'; $str .= 'if('.$okay.' == 0) {'; $str .= 'message.push('.$message.');'; $str .= '}</script>'; echo $str; return false;
}
请问是这样吗?不对哦,还是没走客户端验证,直接走服务端验证了。。。 -
是啊俊
注册时间:2017-07-28
最后登录:2018-01-23
在线时长:13小时58分
最后登录:2018-01-23
在线时长:13小时58分
- 粉丝0
- 金钱785
- 威望20
- 积分1115