我正在尝试在控制器中设置模型的属性值,以便稍后访问。在我的索引中我有
public function actionIndex($id)
{
$model = new Recipient;
$model->listId = $id;
ActiveDataProvider('Recipient', array('criteria'=>array(
'condition'=>'list_id = '.$id)));
$this->render('index',array(
'dataProvider'=>$dataProvider,
'id'=>$id
));
}
然后在模型中我想使用listId,所以我有
public $listId;
// before you save the function here are the things you should do
public function beforeSave()
{
if($this->isNewRecord)
{
// updates the list_id of the individual with the passed in listId
$this->list_id = $listId;
}
return parent::beforeSave();
}
现在,在控制器中使用actionCreate(而不是actionIndex)之前,将调用此模型函数。是否还有一种方法可以将该变量保留在控制器中,然后在模型中调用它?我一直在使用的另一个选项是将$ id从索引中的视图传递到create中的视图。但是,我觉得我不应该在视图中传递太多数据。
答案 0 :(得分:1)
您必须在actionIndex中删除这些行:
$model = new Recipient;
$model->listId = $id;
答案 1 :(得分:1)
您的代码有几个问题:
1)您在actionIndex
中创建了一个新的收件人实例,但从未在任何地方使用过它。因此Sardor's suggestion删除这些行。
2)您正在使用$id
和listId
来引用相同的内容。您应该使用$listId
代替。
3)您必须在应用程序实例之间保留listid
的值。你可以设置一个会话变量,但这是一个糟糕的想法(你必须仔细设置和清除它)。更好的解决方案是将listid
传递给视图,然后以POST
/ GET
参数的形式返回控制器。
如果您担心发送过多数据,则可以始终将listid
作为POST
参数传递。然后,您可以使用$model->listid = $_POST['listid']
在控制器中设置它。
另一种解决方案是在创建网址时加密get参数并在actionCreate