@alekskondr
php, javascript, yii2, drupal, MQL

Как сделать Ajax валидацию в Yii2?

Есть две таблицы user, orders
Например клиент хочет вывести деньги, но у него их нету.
Как сделать с Ajax, чтобы при вводе суммы меньшей чем у него на балансе выдавало ошибку.
Задача не сложна, но это мой первый проект на yii.
Как правильно прописать проверку к БД?

Вот форма с полем суммы.
<?php $form = ActiveForm::begin(); ?>
<?= $form->field($model, 'sum')->textInput(['maxlength' => 255]) ?>
<div class="form-group">
        <?= Html::submitButton($model->isNewRecord ? Yii::t('frontend', 'Create') : Yii::t('frontend', 'Update'), ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?>
    </div>


Контроллер, почистил от лишнего, чтоб понятнее было
public function actionCreate()
    {
            $model = new Orders();

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


Просьба, скиньте пример.
  • Вопрос задан
  • 955 просмотров
Решения вопроса 1
@Akellacom
CTO
У вас работает стандартная валидация полей по правилам в модели?

Если да, тогда вам должен помочь пример который я приведу ниже:

public function rules()
{
	return array(
		array(array('password','confirmpassword'), 'required'),
		array('password', 'validatePasswordEquals'),
	);
}
 
//Кастомная функция для проверки паролей
public function validatePasswordEquals()
{
	if($this->password!=$this->confirmpassword) {
		$errorMsg= 'Passwords must be equal.';
		$this->addError('confirmpassword',$errorMsg);
	}
	if(strlen($this->password)<=8) {
		$errorMsg= 'Password must be at least 8 symbols length';
		$this->addError('password',$errorMsg);
	}
}


Вы добавляете новое правило, например
array('balans', 'checkMoney'),

И далее просто добавляете новый метод checkMoney, с нужным вам функционалом проверок :)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы