如何在控制器中设置模型的属性 - yii

时间:2014-07-11 09:24:38

标签: php yii model controller

我正在尝试在控制器中设置模型的属性值,以便稍后访问。在我的索引中我有

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中的视图。但是,我觉得我不应该在视图中传递太多数据。

2 个答案:

答案 0 :(得分:1)

您必须在actionIndex中删除这些行:

$model = new Recipient;
$model->listId = $id; 

答案 1 :(得分:1)

您的代码有几个问题:

1)您在actionIndex中创建了一个新的收件人实例,但从未在任何地方使用过它。因此Sardor's suggestion删除这些行。

2)您正在使用$idlistId来引用相同的内容。您应该使用$listId代替。

3)您必须在应用程序实例之间保留listid的值。你可以设置一个会话变量,但这是一个糟糕的想法(你必须仔细设置和清除它)。更好的解决方案是将listid传递给视图,然后以POST / GET参数的形式返回控制器。

如果您担心发送过多数据,则可以始终将listid作为POST参数传递。然后,您可以使用$model->listid = $_POST['listid']在控制器中设置它。

另一种解决方案是在创建网址时加密get参数并在actionCreate

中解密