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