Flex和Zend_AMF:如何从Flex获取Flex arrayCollection到PHP?

时间:2009-09-22 15:41:59

标签: php flex amf casting

我目前在Flex中有一个arrayCollection,我想将它发送给PHP(Zend_AMF)。根据Zend_AMF wiki,直接发送一个arrayCollection将迫使Zend_AMF将arrayCollection转换为一个不好的对象。我宁愿拥有一系列模型。

我认为最好的方法是将arrayCollection转换为flex中的数组,然后将其发送出去。这是真的,如果是这样,我将如何在Flex 3中做到这一点?

如果你有更好的推荐,那也值得赞赏。

感谢您的期待!

1 个答案:

答案 0 :(得分:2)

实际上,您可以在PHP端创建一个ArrayCollection类型,并直接通过AMF发送本机ArrayCollection对象。

这是我的一些PHP代码。将其保存在名为

的文件中

ArrayCollection.php

<?php
class ArrayCollection {
    public function getASClassName()
    {
        return 'flex.messaging.io.ArrayCollection';
    }

    var $source = array();

    function ArrayCollection()
    { 
        $this->source = array(); 
    }
}

要在php端使用它,请在php项目中包含ArrayCollection.php,调用它的语法如下所示:

$myArrayCollection = new ArrayCollection(); 

如果你想访问组成ArrayCollection的数组,你可以这样做

$someArray = $myArrayCollection->source;

在Flex端,您可以通过Zend AMF将Array Collections直接传递给服务器。在我的一个项目中,我有许多值包含ArrayCollections的值对象,它们在PHP端工作得很好。所以可以做到。

如果绝对无法在PHP中使用ArrayCollection,则可以将该数组作为Actionscript中ArrayCollection的“source”属性进行访问。代码在actionscript中看起来像这样:

import mx.collections.ArrayCollection;

public var myAC:ArrayCollection = new ArrayCollection();

public var myArray:Array = new Array();

// populate your ArrayCollection with data...

myArray = myAC.source;

myArray现在将是ArrayCollection myAC中对象的数组。

希望这会有所帮助。如果您有其他问题和/或有代码示例,请告知我们。

我也花了一些时间来解决这个问题。