Yii2根据相关模型属性进行验证

时间:2019-03-29 10:18:37

标签: validation yii2

我有一个包含两个字段的表格。第一个字段是相关模型的下拉列表:伙伴。在验证中,我想根据此相关模型检查其他输入。

示例:

  • 字段1:下拉列表-伙伴(partner_id)
  • 字段2:金额

因此,第1步:我必须选择合作伙伴。在模型合作伙伴中,有一个属性和一个值,分别是amount_min(例如10)和amount_max(例如20)。

第2步:我必须输入金额。 (例如21)

在验证中,我想检查用户在字段2中键入的金额是否在所选伙伴的amount_min和amount_max之间。

public function rules() {
    return [
        ['amount', 'compare', 'compareValue' => function($model) {return $model->partner->amount_min;}, 'operator' => '>=', 'type' => 'number'],

但是我得到了:

  

试图获取非对象的属性

如何以及在哪里可以做到最好呢?

为什么另一个问题不同:在进行验证时,还没有保存related_id,因此还没有关系。

1 个答案:

答案 0 :(得分:0)

比较并验证“金额”字段。例如:

protected $_partner;
//...

public function rules()
{
  return [
      ['amount', 'required'],
      ['amount',
          function ($attribute) {
              if ($this->_partner === null || $this->partner_id < $this->_partner->amount_min) {
                  $this->addError($attribute, Yii::t('user', 'The amount is less...'));
              }
          }
      ]
}
#code ...

public function beforeValidate()
{
    if (parent::beforeValidate()) {
        $this->_partner = partner::findOne($this->partner_id);
        return true;
    } else {
        return false;
    }
}

您也可以使用模型:

public function verify ()
     {
         if ($ this->validate() && $this->_partner) {
             #code ....
         }

         return false;
     }

然后在控制器中,调用verify方法