我有的:
public function beforeValidate() {
$offender = Accounts::model()->find(array('select'=>'id','condition'=>'username=:username','params'=>array(':username'=>$this->offender)));
$informer = Accounts::model()->find(array('select'=>'id','condition'=>'username=:username','params'=>array(':username'=>$this->informer)));
$this->offender = $offender->id;
$this->informer = $informer->id;
return parent::beforeValidate();
}
我得到什么:
PHP 注意,也就是说,我正在尝试获取非对象 $offender和$informer的属性“ id ” 。
但这些都是 100% 的对象:
var_dump($罪犯):
对象(帐户)[46]
var_dump($informer):
对象(帐户)[46]
它实际上设置了正确的 id,但无论如何都会显示该通知。怎么了?
已解决 不能将其作为官方答案发布六个多小时,所以我把它留在这里:
实际上,问题出在双 beforeValidate() 调用中。
滥用控制器.php:
if(isset($_POST['AbuseReport']))
{
$model->attributes=$_POST['AbuseReport'];
if($model->validate())
{
$model->save();
}
}
它第一次验证,并用正确的 ID$model->validate()
替换$this->offender
和。$this->informer
第二次验证$model->save();
,但模型null
这次返回,因为$this->offender
已经是 ID,但它需要用户名。
对此的整个解决方案是禁用第二次验证:$model->save(false);
.