我有一个有两个字段的表单。第一个字段是相关模型的下拉列表:合作伙伴。在验证中,我想基于此相关模型检查其他输入。
例:
所以第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尚未保存,所以还没有关系。
比较和验证“金额”字段。例如:
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方法