2015-12-02 7 views
0

Мне нужно сравнить значение 2 атрибута в модели, и только если первое значение ниже второго значения формы может validate.I попробовать с ниже кода, но он не работал.yii2 пользовательская проверка не работает

контроллер

public function actionOpanningBalance(){ 

    $model = new Bill(); 
    if ($model->load(Yii::$app->request->post())) { 
     $model->created_at = \Yii::$app->user->identity->id; 
     $model->save(); 
     }else{ 
     return $this->render('OpanningBalance', [ 
      'model' => $model, 
     ]); 
    } 
} 

Модель

public function rules() 
{ 
    return [ 
     [['outlet_id', 'sr_id', 'bill_number', 'bill_date', 'created_at', 'created_date','bill_amount','credit_amount'], 'required'], 
     [['outlet_id', 'sr_id', 'created_at', 'updated_at'], 'integer'], 
     [['bill_date', 'd_slip_date', 'cheque_date', 'created_date', 'updated_date','status'], 'safe'], 
     [['bill_amount', 'cash_amount', 'cheque_amount', 'credit_amount'], 'number'], 
     [['comment'], 'string'], 
     ['credit_amount',function compareValue($attribute,$param){ 
       if($this->$attribute > $this->bill_amount){ 
       $this->addError($attribute, 'Credit amount should less than Bill amount'); 
    }],   
     [['bill_number', 'd_slip_no', 'bank', 'branch'], 'string', 'max' => 225], 
     [['cheque_number'], 'string', 'max' => 100], 
     [['bill_number'], 'unique'] 
    ]; 
} 
} 

Это происходит в функции валидатор, но не добавляет ошибку, как я хотел

$ this-> addError ($ attribute, «Сумма кредита должна быть меньше, чем Bill крепление ');

Кто-нибудь может мне помочь?

+0

Вы должны просто называть '$ model-> validate()' ... – soju

+0

вы имеете в виду add like if ($ model-> validate()) {"save model"} Я сделал, но не сработал. –

+0

удалить имя функции 'comparevalue'. –

ответ

2

Попробуйте это:

public function actionOpanningBalance(){ 

$model = new Bill(); 
if ($model->load(Yii::$app->request->post()) && $model->validate()) { 
    $model->created_at = \Yii::$app->user->identity->id; 
    $model->save(); 
    }else{ 
    return $this->render('OpanningBalance', [ 
     'model' => $model, 
    ]); 
} 
} 

Для санкционирования

Вы можете использовать анонимную функцию:

['credit_amount',function ($attribute, $params) { 
      if ($this->$attribute > $this->bill_amount)) { 
       $this->addError($attribute, 'Credit amount should less than Bill amount.'); 
       return false; 
      } 
     }], 
+0

не сохраняются, но не отображаются ошибки в атрибуте –

+0

Попробуйте с анонимной функцией: http://www.yiiframework.com/doc-2.0/guide-input-validation.html#ad-hoc-validation –

+0

Я узнал, что $ this-> addError ($ attribute, «Сумма кредита должна быть меньше суммы счета»); не работает –

0

вы можете использовать, как это ниже ответ также написать

public function rules(){ 
    return [ 
     ['credit_amount','custom_function_validation', 'on' =>'scenario']; 
} 
public function custom_function_validation($attribute){ 
    // add custom validation 
    if ($this->$attribute < $this->cash_amount) 
     $this->addError($attribute,'Credit amount should less than Bill amount.'); 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^