如何在CakePHP的视图之间发送数组
我不确定我是否提出正确的问题,但仍然...
我有一个视图,显示了嵌入的Flash,此Flash将生成XML的/ controller / action
URL作为参数。我需要从这个视图发送一个数组到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); }