Yii2 上的自定义字段验证器客户端

Custom Field Validator Client Side on Yii2

当我尝试为我的输入添加自定义验证器规则时遇到了一些问题。 这是我的代码。

型号

class Category extends \yii\db\ActiveRecord{

    /**
     * @inheritdoc
     */
    public static function tableName()
    {
        return 'cat';
    }

    /**
     * @inheritdoc
     */
    public function rules()
    {
        return [
            [['cat_cod','cat_deep','cat_father'], 'required'],
            //other rules
            [['cat_cod'], 'test'],

        ];
    }
    public function test($attribute){
        $cat_cod = $this->$attribute;
        if($cat_cod == 'test'){
            $this->addError($attribute,"Error Test");
        }
    }

所以,这只是一个测试,但是当我提交我的表单时它工作正常,但它在客户端验证中不起作用。

如果 cat_cod 为空:

如果我在输入字段中写测试

在图 2 中,当我编写测试时未在客户端验证

更新 在 Yupik Comment 之后,服务器端验证工作正常,所以如果我想添加客户端验证,我必须实现 AjaxValidation。 所以我只在一个字段中激活了 ajax 验证

$form->field($model, 'cat_cod',['enableAjaxValidation' => true])->textInput();

现在在我的控制器中我该如何处理呢?文档不是很清楚。 这是我试过的

if($model->load(Yii::$app->request->post()) && $model->validate()){
        if (Yii::$app->request->isAjax ) {
            Yii::$app->response->format = Response::FORMAT_JSON;
            return ActiveForm::validate($model);
        }
   //something else

因为这是服务器端验证器。要添加客户端验证器,请使用 whenClient 来检查是否应应用规则。 阅读更多 docs