2015-12-21 77 views
1

我需要創建依賴驗證。當我在下拉菜單中選擇選項時,我必須從數據庫中獲得價值(最小和最大總和)。 我從下拉列表中選擇一個代碼:yii2依賴最小/最大驗證

 [ 
      ['sum'], 
      'number', 
      'min' => HdbkPaymentMethod::getMethodSumMinById(1), 
      'max' => HdbkPaymentMethod::getMethodSumMaxById(1), 
      'when' => function($model, $attribute) { 
       $model->method_id == 1; 
      }, 
      'whenClient' => "function (attribute, value) { 
       return $('#payment-method_id').val() == 1; 
      }" 
     ], 

,但它必須是在下拉列表很多選擇。幫幫我吧。

+0

'[['sum','option1','option2'],............]' –

+0

可以給我更高級的例子嗎? – Fisher

回答

2

如果我理解這個問題,您希望sum的值在maxmin指定的範圍內。要做到這一點,你需要maxmin的功能。另外,如果像我們懷疑,maxmin只能是數值,你需要一個inline validator,或用戶定義的驗證

[ 
    ['sum'], 
    'validateSum' 
], 

然後在模型中添加一個校驗;

public function validateSum($attribute, $params){ 
    if ($this->$attribute < HdbkPaymentMethod::getMethodSumMinById($this->method_id){ 
     $this->addError($attribute, 'Sum is too small'); 
    } 
if ($this->$attribute > HdbkPaymentMethod::getMethodSumMaxById($this->method_id){ 
     $this->addError($attribute, 'Sum is too big'); 
    } 
} 

對不起,我沒有測試過,但它似乎是correcdt方法。我不確定你將如何實現這種安排的客戶端驗證!

+0

如果我是正確的 - 最小/最大不能是一個函數,只是整數|浮點值。錯誤:'類關閉對象無法轉換爲字符串' – Fisher

+0

嗯,我沒有嘗試過,但你可能是正確的@fisher。在這種情況下,您需要一個內嵌驗證器http://www.yiiframework.com/doc-2.0/guide-input-validation.html#inline-validators。我會修改我的答案。 –

+1

@Fisher如果這個或其他答案回答你的問題,你會如此友善接受答案?它將幫助網站的其他用戶查看哪種答案適合您的情況 –