2014-07-11 61 views
0

我試圖在稍後訪問的控制器內設置模型的屬性值。在我的索引我有如何在控制器中設置模型的屬性 - yii

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中的視圖中。但是,我並不認爲我應該在視圖中傳遞太多數據。

回答

1

你的代碼中有幾個問題:

1)您在actionIndex創建收件人的新實例,但從來沒有在任何地方使用它。因此Sardor's suggestion刪除這些行。

2)您正在使用$idlistId來指代相同的事情。您應該使用$listId

3)您必須在應用程序實例之間保留listid的值。你可以設置一個會話變量,但這是一個可怕的想法(你必須仔細設置和清除它)。更好的解決方案是將listid傳遞到視圖並作爲參數POST/GET返回到控制器。

如果您擔心發送太多數據,您可以始終通過listid作爲POST參數。您可以使用$model->listid = $_POST['listid']將其設置在控制器中。

創建url和解密它時,另一種解決方案是將GET參數加密你的actionCreate

+0

如果你說$ model = new Recipient沒有被使用,那麼當我調用$ model-> listId = $ id時會發生什麼?這是不是指我創建的新收件人? – Stephen

+0

我的意思是說,所做的一切就是設置「listid」。 '$ model'沒有被保存,在任何地方引用或傳入視圖,因此它是沒有用的。 – topher

+0

啊,好吧,所以我需要保存$模型,如果我想反正使用它 - 所以這是空的代碼在這種情況下。即使我嘗試在「beforeSave」函數中使用它,情況也是如此? – Stephen

1

您必須的actionIndex刪除這些行:

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

但是擁有這些線路的全部意義就是讓我設置listID是什麼?如果我沒有這些行,我該如何設置listId在模型中的內容?這隻意味着我會在模型中有一個未被觸及的變量 – Stephen

+0

但是,您沒有在actionIndex中使用$ model,它沒有任何意義。您只需創建新對象,並設置$ model-> listId = $ id;但是,您沒有發送$ model來查看。 –

相關問題