@hollanditkzn

Как создать свою валидацию по определенным условиям?

У меня есть 2 модели, мне нужно чтобы валидация проверила по определенным условиям, не получается реализовать. Валидация должна проверять сумма которая пришла не должна превышать сумму которая указана к оплате, чтобы не было сдачи. Сумму внесение указывает пользователь. В контроллере вот как реализвал
public function actionFinancy($oplata, $sum)
    {
        $validat = new DynamicModel(compact('oplata', 'sum'));
        $validat->addRule([['oplata', 'sum'], 'number', 'when' => function($oplata, $sum){
            return $oplata <= $sum;
    }])->validate();

        if ($validat->hasErrors()){
            return 'Сумма превышает всего суммы';
        }
    }
public function actionDraft($id)
    {
        $model = $this->findModel($id);
        $financy = new Financy();
        $validate = $this->actionFinancy($model->oplata, $financy->sum);

        if ($financy->load(Yii::$app->request->post()) && $financy->validate()){
            if (!$financy->save()){
                print_r($financy->getErrors());
            } else {
                $model->fact_oplata = $model->fact_oplata + $financy->sum;
                if ($model->oplata === $model->fact_oplata){
                    $model->action = 0;
                    $model->save();
                    Yii::$app->session->addFlash('update', 'Заказ был закрыт');
                }
            }
            return $this->redirect(['admin']);
        }

        return $this->renderAjax('draft', [
            'model' => $model,
            'financy' => $financy,
        ]);
    }

Просто получаю ошибку Missing argument 2 for yii\base\DynamicModel::addRule(), called in C:\OpenServer\domains\crm\frontend\controllers\ZakazController.php on line 990 and defined
Не пойму как можно это все реализовать?
  • Вопрос задан
  • 133 просмотра
Пригласить эксперта
Ответы на вопрос 1
@MadridianFox
Web-программист, многостаночник
Просто надо читать документацию. Метод addRule принимает три аргумента
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы