Flex и Zend_AMF: как получить коллекцию Flex из коллекции Flex в PHP? - PullRequest
1 голос
/ 22 сентября 2009

В настоящее время у меня есть arrayCollection во Flex, и я хочу отправить его в PHP (Zend_AMF). Согласно вики Zend_AMF, прямая отправка arrayCollection заставит Zend_AMF привести массив arrayCollection как бесполезный объект. Я предпочел бы иметь массив моих моделей.

Я предполагаю, что лучшим способом было бы преобразовать arrayCollection в массив в flex и затем отправить его заново. Это правда, и если да, то как мне это сделать во Flex 3?

Если у вас есть лучшая рекомендация, это также будет оценено.

Спасибо за внимание!

1 Ответ

2 голосов
/ 23 сентября 2009

На самом деле вы можете создать тип ArrayCollection на стороне PHP и отправлять собственные объекты ArrayCollection непосредственно через AMF.

Вот мой php-код, который работает. Сохраните это в файле с именем

ArrayCollection.php

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

    var $source = array();

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

Чтобы использовать это на стороне php, включите ArrayCollection.php в ваш проект php, и синтаксис для его вызова выглядит примерно так:

$myArrayCollection = new ArrayCollection(); 

и если вы хотите получить доступ к массиву, который составляет ArrayCollection, вы можете сделать это

$someArray = $myArrayCollection->source;

На стороне Flex вы можете передавать коллекции массивов непосредственно на сервер через Zend AMF. В одном из моих проектов у меня есть много объектов-значений, в которых есть ArrayCollections, и они прекрасно работают на стороне PHP. Так что это может быть сделано.

Если вы абсолютно не можете заставить работать ArrayCollection в PHP, вы можете просто получить доступ к массиву как к свойству «source» ArrayCollection в Actionscript. Код выглядит примерно так в 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.

Надеюсь, это поможет. Если у вас есть дополнительные вопросы и / или пример кода, дайте мне знать.

Мне понадобилось немного времени, чтобы понять это тоже.

...