YII2 Пользовательская проверка не работает с правилом пользовательской модели функций

Я пытаюсь реализовать с помощью пользовательской функции в модели не работает, я не понимаю, что не так в моем коде. Я пытаюсь позвонить с основным позже, я поставлю свое состояние.

Вот код модели

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,
            ]);
        }
    }

это не присвоение ошибки в поле формы.

Thanks in advance.

4 ответа

Решение

Код в порядке. это была ошибка с проверкой динамической формы.

Я думаю, что ваши данные не содержат параметр с именем mobile_number или это пустая строка, поэтому попробуйте добавить 'skipOnEmpty' => false в вашем коде.

Пожалуйста, попробуйте это, это работает для меня.

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

Вы уверены, что не расширяете модельный класс? если это так, вы должны поставить это:

$model->validate()

Ваша модель:

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,
        ]);
    }
}

Попробуйте это в вашем контроллере

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,
        ]);
    }
}
Другие вопросы по тегам