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

时间:2017-12-07 10:59:18

标签: php validation yii2-advanced-app active-form

当我尝试为输入添加自定义Validator规则时,我遇到了一些麻烦。 这是我的代码。

MODEL

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为空:

cat_cod is empty

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

enter image description here

在我写测试的2图像中,在客户端没有验证

更新 Afte Yupik评论,服务器端验证工作正常,所以如果我想添加客户端验证,我必须实现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

1 个答案:

答案 0 :(得分:0)

因为这是服务器端验证器。要添加客户端验证程序,请使用{{1}}检查是否应该应用规则。 阅读更多docs