YII2自定义验证不适用于自定义功能模型规则

时间:2015-12-03 07:15:23

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

我试图在模型中使用自定义函数实现它不工作我没有在我的代码中得到错误。我试着打电话给基本以后我会说出我的条件。

这是型号代码

input_txt.innerHTML

这是控制器代码

public function rules()
    {
        return [
            ['mobile_number', 'required'],
            ['mobile_number', 'myfunction'],

        ];
    }

public function myfunction($attribute,$params)
    {
             $this->addError($attribute, 'You have already submitted');

    }

它没有将错误分配给表单字段。

public function actionCreate()
    {
        $model = new Createuser();

        if ($model->load(Yii::$app->request->post()) && $model->save()) {
            return $this->redirect(['view', 'id' => $model->id]);
        } else {
            return $this->render('create', [
                'model' => $model,
            ]);
        }
    }

5 个答案:

答案 0 :(得分:1)

我猜您的数据不包含名为mobile_number的参数,或者它是一个空字符串,因此请尝试在代码中添加'skipOnEmpty' => false

请尝试一下,它对我有用。

public function rules()
{
    return [
        ['mobile_number', 'required', 'skipOnEmpty' => false],
        ['mobile_number', 'myfunction', 'skipOnEmpty' => false],
    ];
}

答案 1 :(得分:0)

你确定你没有扩展模型类吗?如果是这样你需要把它放在:

$model->validate()

答案 2 :(得分:0)

你的模特:

public function rules()
{
    return [
        ['mobile_number', 'required'],
        ['mobile_number', 'myfunction'],
    ];
}

public function myfunction($attribute,$params)
{
    $this->addError($attribute, 'You have already submitted');
    return false;   
}

你的控制器:

public function actionCreate()
{
    $model = new Createuser();

    if ($model->load(Yii::$app->request->post()) && $model->save() && $model->validate()) {
        return $this->redirect(['view', 'id' => $model->id]);
    } else {
        return $this->render('create', [
            'model' => $model,
        ]);
    }
}

答案 3 :(得分:0)

试试这个 在你的控制器

protected function performAjaxValidation($model = NULL) {

        if (Yii::$app->request->isAjax && $model->load(Yii::$app->request->post())) {
            Yii::$app->response->format = Response::FORMAT_JSON;
            echo json_encode(ActiveForm::validate($model));
            Yii::$app->end();
        }
    }

public function actionCreate()
{
    $model = new Createuser();
    $this->performAjaxValidation($model);
    if ($model->load(Yii::$app->request->post()) && $model->save() && $model->validate()) {
        return $this->redirect(['view', 'id' => $model->id]);
    } else {
        return $this->render('create', [
            'model' => $model,
        ]);
    }
}

答案 4 :(得分:0)

代码很好。动态表单验证错误。