2009-09-22 3 views
1

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

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

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

Спасибо, что посмотрели!

ответ

2

На самом деле вы можете создать тип 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, вы можете просто получить доступ к массиву как к «исходному» свойству 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; 

туАггау теперь будет массив объектов в ArrayCollection MyAC.

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

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