2015-12-21 85 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如果这个或其他答案回答你的问题,你会如此友善接受答案?它将帮助网站的其他用户查看哪种答案适合您的情况 –