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

问题描述 投票:0回答:1

我有一个有两个字段的表单。第一个字段是相关模型的下拉列表:合作伙伴。在验证中,我想基于此相关模型检查其他输入。

例:

  • 字段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尚未保存,所以还没有关系。

validation yii2
1个回答
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方法

© www.soinside.com 2019 - 2024. All rights reserved.