2013-08-29 3 views
0

저는 YII 사용에 관해서는 아직 초보자입니다. 그러나 지난 며칠 동안 세션 변수로 작업 중이었고, 제 오류에 대한 개념을 이해하지 못하는 것 같습니다. 모든 조언을 주시면 감사하겠습니다.Yii - sesssion 변수 조작

내 추가 변수는 세션 변수 nutrition에 추가 된 마지막 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; 
    } 

제 제거 기능이 아무리해도 작동하지 않는 것 같습니다. 세션 배열을 임시 배열로 전송하는 이유는 "전역 변수가 함수 내에서 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; 
    } 

올바른 방향으로 향한 조언이나 의견을 보내 주시면 감사하겠습니다. 위의와 다차원 배열에 문제가있을 것 같습니다 내가 주석에 넣어으로

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 

:

+0

'unset ($ nutritionArray [$ pageId]);'을 실행 한 후에'unset (Yii :: app() -> session [ 'nutrition']);을 시도해보고 print_r ($ nutritionArray);'올바른 데이터가 있는지 확인하십시오. – Pitchinnate

+0

또한 문제의 일부일 수 있습니다. https://code.google.com/p/yii/issues/detail?id=1681 – Pitchinnate

답변