>

모델의 두 속성 값을 비교해야하며 첫 번째 값이 두 번째 값보다 낮은 경우에만 양식을 확인할 수 있습니다. 아래 코드로 시도하지만 작동하지 않습니다.

컨트롤러

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, 'Credit amount should less than Bill amount');

누구든지 도와 줄 수 있나요?

  • 답변 # 1

    이것을 시도하십시오 :

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

  • 답변 # 2

    아래와 같이 사용할 수 있습니다. 답변도 쓰십시오

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

  • 답변 # 3

    유효성 검사에서 오류가 추가되지 않으면 대부분 생략 된 것입니다. 이 문제는 기본 규칙 동작으로 인해 발생했을 가능성이 높습니다. https://www.yiiframework.com/doc/guide/2.0/en/input-validation#inline-validators

    구체적으로 :

    와이즈 비즈

    따라서

    By default, inline validators will not be applied if their associated attributes receive empty inputs or if they have already failed some validation rules. If you want to make sure a rule is always applied, you may configure the skipOnEmpty and/or skipOnError properties to be false in the rule declarations.

    를 설정해야합니다  또는 skipOnEmpty  자신에게 적합한 값 :

    skipOnError
    
    

  • 답변 # 4

    다음과 같이 3 번째 매개 변수를 사용하여 custom_function_validation을 작동 시켰습니다 :

    [
        ['country', 'validateCountry', 'skipOnEmpty' => false, 'skipOnError' => false],
    ]
    
    

    public function is18yo($attribute, $params, $validator) { $dobDate = new DateTime($this->$attribute); $now = new DateTime(); if ($now->diff($dobDate)->y < 18) { $validator->addError($this, $attribute, 'At least 18 years old'); return false; } }

관련 자료

  • 이전 __FILE__과 동등한 VHDL은 무엇입니까?
  • 다음 javascript - 하이 차트 - 도표가있는 시리즈 한 번에 하나의 시리즈 만 표시