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

时间:2008-10-02 11:23:23

标签: arrays cakephp parameters

我不确定我是否正确地提出了这个问题,但仍然......

我有一个显示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>";

4 个答案:

答案 0 :(得分:2)

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

player.ctp

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

然后读回来:

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

答案 1 :(得分:1)

将数组保存在会话中,然后在下一个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会附加到动作的url:

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

并恢复会话:

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

答案 2 :(得分:0)

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

现在关于必须发送到你的行动的数组,我完全糊涂了。我不认为你正在以正确的方式看问题。如果该操作需要一个数据数组然后生成XML以便Flash对象可以获得它,那么它就更没意义了。您确定Flash对象不是负责将该数据数组发送到您提到的Param的吗?

好吧,即使您所说的一切都必须这样做,我建议您将该数组放在文件系统上,然后在Flash调用该操作时将其取出。

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

这两个建议都暗示我对你的谓词完全“无能”。

我仍然要问,Flash对象不会在这一切中做点什么吗?

答案 3 :(得分:0)

您可以将包含视图数据的数组发送到CakePHP中的控制器,如下所示。

您可以传递参数链接:

www.site.com/model/action/param1:foo/param2:test

然后,您可以通过以下方式在控制器操作中检索它们:

$yourarray = $this->params['named'];

当然阵列不应该太大。