【问题标题】:yii pass data in between two modelsyii 在两个模型之间传递数据
【发布时间】:2013-09-18 15:34:35
【问题描述】:

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

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

在搜索中发生逻辑后,我需要将值存储在会话中,当我通过 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)

【问题讨论】:

标签: php session yii session-variables


【解决方案1】:

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

在您的 config 组件下

            'session'=>array(

                    'class'=>'CDbHttpSession',

            ),

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

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

并像这样使用它-

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

试一试。

干杯

【讨论】:

  • 你能否提供扩展代码,这可能有助于理解发生了什么,现在尝试使用 json_encode 和 json_decode 在会话中保存数据。愿它有所帮助。如果不发布扩展代码。好的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-09
  • 1970-01-01
相关资源
最近更新 更多