我不确定我是否正确地提出了这个问题,但仍然......
我有一个显示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>";
答案 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'];
当然阵列不应该太大。