在YII2中捕获验证失败的Google Analytics事件

m3eecexj  于 2022-11-09  发布在  Go
关注(0)|答案(1)|浏览(136)

在我们的YII应用程序中,我们希望捕获谷歌对验证失败的分析。我们使用模态规则来验证我们的数据。以下是我们的验证模态代码片段之一

public function rules() {
    return [
          ['email', 'validateEmail'],
    ];
}

public function validateEmail($attribute_name, $params) {
    if (EMAIL EXITS IN DATABASE) {
        $this->addError($attribute_name, Yii::t('app', 'Email Already Exist.'));
        return false;
    }
}

它在我们的前端正确地显示了一个错误消息,但是我们不能在google analytics中跟踪这个消息。我们希望在验证失败时调用一个javascript函数。下面是我们的javascript函数

function captureGAEvent(category, action, label) {
    alert(category + " " + action + " " + label);
    ga('send', 'event', category, action, label);
}

请你指导。

stszievb

stszievb1#

yii2文档说明你可以设置客户端验证
哪一个有一个clientValidateAttribute方法实现客户端验证,您也可以在其中放置您的分析代码。
您需要在ActiveForm中启用enableClientValidation。
我将根据“延迟验证”段落执行以下操作。
创建验证器类

class UserEmailValidator extends Validator
{
    public function init()
    {
        parent::init();
        $this->message = 'Email Already Exist..';
    }

    public function validateAttribute($model, $attribute)
    {
        if (EMAIL EXISTS IN DATABASE) {
            $this->addError($attribute, Yii::t('app', $this->message));
            return false;
        }
    }

    public function clientValidateAttribute($model, $attribute, $view)
    {
        return <<<JS
        deferred.push($.get("/check-email-exists", {value: value}).done(function(data) {
            if ('' !== data) {
                messages.push(data);

                alert(category + " " + action + " " + label);
                ga('send', 'event', category, action, label);
            }
        }));
JS;
    }
}

在模型中使用它

public function rules() {
    return [
          ['email', UserEmailValidator::class],
    ];
}

相关问题