2009-09-22 9 views
1

J'ai actuellement un arrayCollection dans Flex et je veux l'envoyer à PHP (Zend_AMF). D'après le wiki Zend_AMF, envoyer un arrayCollection directement forcera Zend_AMF à lancer le arrayCollection comme un objet qui n'est pas bon. Je préfère avoir un éventail de mes modèles.Flex et Zend_AMF: Comment obtenir une Flex arrayCollection de Flex en PHP?

Je suppose que le meilleur moyen serait de convertir la arrayCollection en tableau en flex puis de l'envoyer. Est-ce vrai, et si oui, comment le ferais-je dans Flex 3?

Si vous avez une meilleure recommandation, cela serait également apprécié.

Merci de votre visite!

Répondre

2

En fait, vous pouvez créer un type ArrayCollection du côté PHP et envoyer des objets ArrayCollection natifs directement sur AMF.

Voici un code php que j'ai qui fonctionne. Enregistrer ce dans un fichier appelé

ArrayCollection.php

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

    var $source = array(); 

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

Pour utiliser ce côté php inclure le ArrayCollection.php dans votre projet php et la syntaxe pour appeler ressemble à quelque chose comme ceci:

$myArrayCollection = new ArrayCollection(); 

et si vous voulez accéder au tableau qui compose la ArrayCollection vous pouvez le faire

$someArray = $myArrayCollection->source; 

Côté Flex, vous pouvez transmettre les collections de tableaux directement au serveur via Zend AMF. Dans un de mes projets, j'ai beaucoup d'objets de valeur qui ont ArrayCollections en eux et ils fonctionnent très bien du côté de PHP. Donc ça peut être fait.

Si vous ne pouvez absolument pas faire fonctionner ArrayCollection en PHP, vous pouvez simplement accéder au tableau en tant que propriété "source" de ArrayCollection dans Actionscript. Le code ressemble à ceci en 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; 

monTableau sera désormais un tableau des objets dans le ArrayCollection myAC.

Espérons que cela aide. Si vous avez d'autres questions et/ou un échantillon de code, faites-le moi savoir.

Il m'a fallu un peu de temps pour comprendre celui-ci aussi.