2013-08-29 63 views
0

我在使用YII時仍然是一個新手,但過去幾天我一直在使用會話變量,而且我似乎無法理解我的錯誤背後的概念。任何建議將被認真考慮。Yii - 操作變量變量

我的add函數到目前爲止工作完美,目前我的目的是跟蹤最後3個變量添加到我的會話變量營養。

public function addSessionFavourite($pageId) 
{ 
    $page = Page::model()->findByPk($pageId); 
    $categoryName = $page->getCategoryNames(); 

    if($categoryName[0] == 'Nutrition') 
    { 
     if(!isset(Yii::app()->session['nutrition'])) 
     { 
      Yii::app()->session['nutrition'] = array(); 
     } 
     $nutrition = Yii::app()->session['nutrition']; 
     array_unshift($nutrition, $pageId); 
     array_splice($nutrition, 3); 
     Yii::app()->session['nutrition'] = $nutrition; 
    } 

我的刪除功能似乎根本不起作用,無論我怎麼處理它。我將Session數組轉換爲臨時數組的原因是試圖繞過「如果一個函數內的全局變量是unset(),只有局部變量被銷燬,調用環境中的變量將保留與之前調用unset()時相同的值。「但這完全是失敗。

public function removeSessionFavourite($pageId) 
{ 
    $page = Page::model()->findByPk($pageId); 
    $categoryName = $page->getCategoryNames(); 

    if($categoryName[0] == 'Nutrition') 
    { 
     if(!isset(Yii::app()->session['nutrition'])) 
     { 
      return true; 
     } 
     $nutritionArray = Yii::app()->session['nutrition']; 
     unset($nutritionArray[$pageId]); 
     Yii::app()->session['nutrition'] = $nutritionArray; 
    } 

任何意見或推動到正確的方向將不勝感激。

+0

嘗試'unset(Yii :: app() - > session ['nutrition']);'在'unset($ nutritionArray [$ pageId]);'之後',也可能要'print_r ($ nutritionArray);'確保你有正確的數據。 – Pitchinnate

+0

另外,這可能是問題的一部分:https://code.google.com/p/yii/issues/detail?id=1681 – Pitchinnate

回答

2

我個人而言,我從來沒有使用Yii::app()->session我通常使用Yii的用戶,我從未有過任何與它的問題:當我加入了註釋

Yii::app()->user->setState('test', array('a'=>1,'b'=>2)); 
print_r(Yii::app()->user->getState('test')); //see whole array 

$test = Yii::app()->user->getState('test'); 
unset($test['b']); 
Yii::app()->user->setState('test',$test); 
print_r(Yii::app()->user->getState('test')); //only 'a'=>1 remains 

Yii::app()->user->setState('test', null); 
print_r(Yii::app()->user->getState('test')); //now a null value 

上面似乎有與多維數組的問題會話變量:https://code.google.com/p/yii/issues/detail?id=1681