0

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

我有一个显示 Flash 嵌入的视图,并且此 Flash 将/controller/action生成 XML 的 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

4 回答 4

2

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

播放器.ctp

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

然后读回来:

public function generate($array) {
  $array = unserialize($array);
}
于 2008-10-02T19:01:44.163 回答
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');
}
于 2008-10-02T18:56:02.693 回答
0

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

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

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

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

这两个建议都暗示我对您的谓词完全“一无所知”。

我还是要问,Flash Object难道不会在这一切中有所作为吗?

于 2008-10-02T11:41:48.887 回答
0

您可以像这样将包含数据的数组从视图发送到 CakePHP 中的控制器。

您可以向链接传递参数:

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

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

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

当然,数组不应该太大。

于 2012-03-10T12:10:38.297 回答