Forms 间接修改重载属性以修改post数据

Forms 间接修改重载属性以修改post数据,forms,yii,Forms,Yii,我的目标是更改一个$\u POST['url']以将其保存在数据库中,并在前面加上“tcp://” $model=$this->loadModel($id) if(isset($_POST['xxx']){ $model->attributes=$\u POST['xxx']; $model->attributes['url']='tcp://'。$\u POST['xxx'];save()){ 但它返回“重载属性的间接修改”。 更改该字段的正确方法是什么?在这种情况下,您有两种选择: 1)

我的目标是更改一个$\u POST['url']以将其保存在数据库中,并在前面加上“tcp://”

$model=$this->loadModel($id)

if(isset($_POST['xxx']){
$model->attributes=$\u POST['xxx'];
$model->attributes['url']='tcp://'。$\u POST['xxx'];save()){
但它返回“重载属性的间接修改”。
更改该字段的正确方法是什么?

在这种情况下,您有两种选择:

1) 因为您使用了
$model->attributes=$\u POST['xxx'];
,您可以访问
$\u POST['xxx']
中的值作为模型的属性,所以
$model->url='something';
将起作用

2) 通常,您可以将要修改的值移动到一个新变量中,在那里进行修改,然后用新变量覆盖原始值。如果您要修改相关模型,这会导致收到相同的错误消息,则此功能尤其有用

错误的方式:

$model->relationSomething = new RelationSomething;
$model->relationSomething->someAttribute = 'newValue';
上述代码将导致您收到错误消息

正确的方法是:

$model->relationSomething = new RelationSomething;
$tempVariable = $model->relationSomething;
$tempVariable->someAttribute = 'newValue';
$model->relationSomething = $tempVariable;
//Optimally you want to save the modification

使用此方法可以修改相关模型中的属性而不会导致错误。

您可以这样做$model->ur='tcp://'。$model->ur
$model->relationSomething = new RelationSomething;
$tempVariable = $model->relationSomething;
$tempVariable->someAttribute = 'newValue';
$model->relationSomething = $tempVariable;
//Optimally you want to save the modification