2015-12-02 122 views
0

我需要比较模型中的2个属性值,并且只有当第一个值低于第二个值时才可以验证。我尝试使用下面的代码,但它不起作用。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'] 
    ]; 
} 
} 

这将在以验证功能,但不会增加像我想的错误

$这个 - > addError ($属性,'信用额度应低于比尔a安装');

任何人都可以帮助我吗?

+0

你应该简单地调用'$ model-> validate()'... – soju

+0

你的意思是添加像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($属性,'信用金额应低于帐单金额'。 不工作 –

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.'); 
}