1

如何在两个模型之间传递数据。

我有一个名为 Search and Activity 的模型。

在搜索中发生逻辑之后,我需要将一个值存储在会话中,当我通过活动模型访问会话时,我应该在会话中获取该存储值。

$activities = Activity::model()->findAll($criteria);
         foreach ($activities as $val)
            $matchingActs[] = $val->id;

我通过以下方式添加它(创建会话)搜索模型

Yii::app()->session['ActivitiesId'] = $matchingActs;

在Activity中使用它如下..

print_r(Yii::app()->session['ActivitiesId']); exit();

这不起作用,我在想天气我应该使用 getState 和 setState。

与两个模型数据传递混淆

输出如下..

Array ( [0] => 2 [1] => 9 [2] => 3 [3] => 16 [4] => 8 [5] => 5 [6] => 4 [7] => 11 [8] => 1 [9] => 10 [10] => 13 [11] => 15 [12] => 14 [13] => 7 [14] => 17 [15] => 18 [16] => 12 [17] => 6 [18] => 19 [19] => 24 [20] => 25 ) 

但实际上只插入这个数组..但上面的其他东西只会出现。

Array ( [0] => 24 [1] => 25 )  // $matchingActs

编辑 1

使用了 setState 和 getState 但它的输出仍然相同。我很困惑为什么 yii 的这种奇怪行为

var_dump 结果在SEARCH模型内如下。 // var_dump($matchingActs);

array (size=2)
  0 => string '24' (length=2)
  1 => string '25' (length=2)

//Yii::app()->user->setState('globalunit',$matchingActs);

array (size=2) // var_dump(Yii::app()->user->getState('globalunit'));
  0 => string '24' (length=2)
  1 => string '25' (length=2)

现在在Activity中,如果我也这样做, // var_dump(Yii::app()->user->getState('globalunit'));

array (size=21)
  0 => string '2' (length=1)
  1 => string '9' (length=1)
  2 => string '3' (length=1)
  3 => string '16' (length=2)
  4 => string '8' (length=1)
  5 => string '5' (length=1)
  6 => string '4' (length=1)
  7 => string '11' (length=2)
  8 => string '1' (length=1)
  9 => string '10' (length=2)
  10 => string '13' (length=2)
  11 => string '15' (length=2)
  12 => string '14' (length=2)
  13 => string '7' (length=1)
  14 => string '17' (length=2)
  15 => string '18' (length=2)
  16 => string '12' (length=2)
  17 => string '6' (length=1)
  18 => string '19' (length=2)
  19 => string '24' (length=2)
  20 => string '25' (length=2)
4

1 回答 1

1

问题是 PHP 不允许在单个会话变量中使用这么长的数据。您可以使用 Yii 中实现的 CDBSession 来解决它以解决 PHP 限制。这就是你使用它的方式。

在组件下的配置中

            'session'=>array(

                    'class'=>'CDbHttpSession',

            ),

现在您可以像这样向其中添加任何数据-

Yii::app()->session->add('name','value');

并像这样使用它-

echo Yii::app()->session['test'];

试试看。

干杯

于 2013-09-18T17:12:29.520 回答