w454638 2011-04-15 14:06:21 7909次浏览 2条回复 0 0 0

当seession为数组的时候,如session为

array(
  array(array(1,1,2),array(1,2,3)),
  array(array(4,5,6),array(7,8,9))
);

时,用yii的CHttpSession的get就不能获取数组里面的指定索引的值了,可以从新定义一个类,继承CHttpSession,重写get方法 如 在protected/components/文件下:

class WHttpSession extends CHttpSession
{
  public function get($key,$defaultValue=null)
  {
    $see = $defaultValue;
    $key = explode(".",$key);
    if(count($key)>=2)
    {
      if(isset($_SESSION[$key[0]]))
      {
        $see =$_SESSION[$key[0]];
        $i=0;
        foreach($key as $v)
        {	
          $i++;
          if($i==1)
            continue;
            $see = $see[$v];
        }	
      }
				
    }
    else
    {
      if(isset($_SESSION[$key[0]]))
      {
        $see = $_SESSION[$key[0]];
      }
    }
			
// return isset($_SESSION[$key]) ? $_SESSION[$key] : $defaultValue;
    return $see;

  }
}

在配置文件里面从新配置session

'session'=>array(
  'class'=>'application.components.WHttpSession',
),

在控制器里面就可以用了

public function actionTest()
{
  $arr = array(
  array(array(1,1,2),array(1,2,3)),
  array(array(4,5,6),array(7,8,9))
  );	
  Yii::app()->session->add('test',$arr);	
  $tt =  Yii::app()->session->get('test.0.1.1');	
  print_r($tt);
}
您需要登录后才可以回复。登录 | 立即注册