如何在CakePHP的视图之间发送数组

时间:2020-03-06 15:01:14  来源:igfitidea点击:

我不确定我是否提出正确的问题,但仍然...

我有一个视图,显示了嵌入的Flash,此Flash将生成XML的/ controller / actionURL作为参数。我需要从这个视图发送一个数组到XML生成器操作。最好的方法是什么?是否有类似的helper-> set()方法,或者我必须创建一个特定的URL才能将该数组发送给该操作?

这是我的结构:

my_controller.php

function player() {}

player.ctp

<div id="myDiv">Here it Goes</div>
<script type="text/javascript">
  var so = new SWFObject('player.swf','test','50','50','8');
  so.addVariable('file','/xml/generate'); // need to pass an array here
  so.write('myDiv');
</script>

xml_controller.php

public function generate() {
  // I need to read an array here
}

generate.ctp

echo "<xml><data>" . $array['contents'] . "</data>";

解决方案

首先,我们无法以我们所说的方式将数据从一个视图发送到另一个视图。这些调用中的每一个都将是一个单独的请求,这意味着它从框架中退出,然后再次进入。这意味着将在调用之间构建和删除该框架,从而无法在视图之间传递数据。

现在,关于必须发送给操作的数组,我完全感到困惑。我认为我们没有以正确的方式看待问题。如果该操作需要一个数据数组然后生成XML,以便Flash Object可以获取它,那么它的意义就更小了。我们确定Flash对象不是将数据数组发送到我们提到的Param的负责人吗?

好吧,即使我们所说的一切必须如此完成,我还是建议我们将该数组放在文件系统上,然后在Flash调用该操作时将其选中。

或者另一个建议是使用AJAX将数组发送给动作。

这两个建议都暗示我对谓语完全"无知"。

我仍然要问,Flash Object是否会在所有这一切中做些事情?

将数组保存在会话中,然后在对XML生成器操作的下一个请求中,从会话中读回该数组。

my_controller.php

function player() {
  $this->Session->write('key', $array);
}

xml_controller.php

public function generate() {
  $array = $this->Session->read('key');
}

但是,我听说过一些问题,其中Flash有时不发送会话Cookie,在这种情况下,请将会话ID添加到操作的网址中:

so.addVariable('file','/xml/generate/<?php echo $session->id(); ?>');

并恢复会话:

public function generate($sessionId) {
  CakeSession::id($sessionId);
  $array = $this->Session->read('key');
}

如果数组足够小,请序列化然后对其进行urlencode并将其作为参数添加到generate操作的url中:

播放器

so.addVariable('file','/xml/generate/<?php echo urlencode(serialize($array)); ?>');

然后读回去:

public function generate($array) {
  $array = unserialize($array);
}