IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Autres composants PHP Discussion :

[Zend_Amf + FLEX] Passage d'un objet Flex->PHP


Sujet :

Autres composants PHP

  1. #1
    Membre à l'essai
    Inscrit en
    Juin 2005
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 25
    Points : 22
    Points
    22
    Par défaut [Zend_Amf + FLEX] Passage d'un objet Flex->PHP
    Bonjour,

    Je mets d'abord le code:

    Le PHP:

    service.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    require_once('Zend/Amf/Server.php');
    require_once('MyService.php');
     
    $server = new Zend_Amf_Server();
     
     
    //adding our class to Zend AMF Server
    $server->setClass("MyService");
     
     
    //Mapping the ActionScript VO to the PHP VO
    //you don't have to add the package name
    $server->setClassMap("MyData", "MyData");
    $server->setClassMap("MyDataCollection", "MyDataCollection");
     
    echo($server -> handle());

    MyService.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    require_once('MyData.php');
    require_once('MyDataCollection.php');
     
    class MyService {
     
    	public function getData() {
     
    		 $ret = array();
     
    		 $myDataCollection = new MyDataCollection();
     
    		 $tmp = new MyData((int) rand(1, 9), "chaine1-".((int) rand(1, 9)));
    		 $myDataCollection->myArray[] = $tmp;
     
    		 $tmp = new MyData((int) rand(1, 9), "chaine1-".((int) rand(1, 9)));
    		 $myDataCollection->myArray[] = $tmp;
     
    		 $ret[] = $myDataCollection;
     
    		 $myDataCollection = new MyDataCollection();
     
    		 $tmp = new MyData((int) rand(1, 9), "chaine2-".((int) rand(1, 9)));
    		 $myDataCollection->myArray[] = $tmp;
     
    		 $tmp = new MyData((int) rand(1, 9), "chaine2-".((int) rand(1, 9)));
    		 $myDataCollection->myArray[] = $tmp;
     
    		 $ret[] = $myDataCollection;
     
    		 return $ret;
    	}
     
    	public function setData($myData) {
     
    		 $handle = fopen("test.txt", 'w');
     
    		 fwrite($handle, $myData->toString()."\r\n");
     
    		 fclose($handle);
     
    		 return NULL;
    	}
    }
    MyData.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    class MyData {
         public $myInt;
         public $myString;
     
    		 public function __construct($myInt, $myString) {
    		 		$this->myInt = $myInt;
    				$this->myString = $myString;
    		 }
     
    		 public function toString() {
    		 		return $this->myInt . " - " . $this->myString;
    		 }
    }
    MyDataCollection.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    class MyDataCollection {
    		 public $myArray;
     
    }
    L'actionscript:

    test_amf.mxml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    <?xml version="1.0" encoding="utf-8"?>
    <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
     
    	<mx:Script>
         <![CDATA[
               import mx.controls.Alert;
               import mx.rpc.events.FaultEvent;
               import my_classes.MyData;
               import my_classes.MyDataCollection;
               import mx.rpc.events.ResultEvent;
               import mx.collections.ArrayCollection;
     
               [Bindable]
               public var myData:MyData;
     
               [Bindable]
               public var myDataCollection:MyDataCollection;
     
               private function getDataListener(event:ResultEvent):void {
               		var arrayTemp:Array = event.result as Array;
               		for each(myDataCollection in arrayTemp) {
    	           		for each(myData in myDataCollection.myArray) {
    	           			myTextArea.text += myData + '\n';
     
    	           		}
               		}
               		myTextArea.text += '\n';
               }
     
               private function setDataListener(event:ResultEvent):void {
               		myTextArea.text += "Données envoyées\n\n";
               }
     
               private function faultListener(event:FaultEvent):void {
                    Alert.show(event.fault.message, "Error");
               }
    ]]>
    	</mx:Script>
     
    	<mx:RemoteObject id="myRemote" destination="zend" source="MyService" showBusyCursor="true" fault="faultListener(event)">
    	     <mx:method name="getData" result="getDataListener(event)"/>
    	     <mx:method name="setData" result="setDataListener(event)"/>
    	</mx:RemoteObject>
     
    	<mx:VBox top="30" left="100">
    		<mx:Button label="Get Data" click="{myRemote.getData()}"/>
    		<mx:Button label="Set Data" click="{myRemote.setData(myDataCollection)}"/>
     
    		<mx:TextArea id="myTextArea" text="" height="400" width="400"/>
     
    		<mx:HBox>
    			<mx:Label text="myData"/>
    			<mx:TextInput text="{myData}"/>
    		</mx:HBox>
     
    		<mx:HBox>
    			<mx:Label text="myDataCollection"/>
    			<mx:DataGrid dataProvider="{myDataCollection.myArray}"/>
    		</mx:HBox>
    	</mx:VBox>
     
    </mx:Application>

    MyData.as

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    package my_classes
    {
    	[RemoteClass(alias="MyData")]
    	[Bindable]
    	public class MyData
    	{
    		public var myInt:int;
    		public var myString:String;
     
    		public function MyData() {
    			this.myInt = 10;
    			this.myString = "chaine test";
    		}
     
    		public function toString():String {
    			return myInt + " - " + myString;
    		}
     
    	}
    }
    MyDataCollection
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    package my_classes
    {
    	[RemoteClass(alias="MyDataCollection")]
    	[Bindable]
    	public class MyDataCollection
    	{
    		public var myArray:Array;
    	}
    }

    Lorsque j'appelle la fonction setData(myDataCollection), j'ai l'erreur suivante :
    faultCode:Client.Error.DeliveryInDoubt
    faultString:'Channel disconnected'
    faultDetail:'Channel disconnected before an acknowledgement was received'
    Or coté PHP, le contenu de myDataCollection est bien écrit dans le fichier test.txt.

    Je galère depuis 2 jours dessus,

    Aidez moi !!!

    Merci

  2. #2
    Membre expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Points : 3 344
    Points
    3 344
    Par défaut
    Bonjour,

    est-ce que tu as trouvé une solution à ce problème ?

    Je ne connais pas bien Zend_Amf, et surtout je ne sais pas trop comment le débugguer...

    Est-ce que tu peux mettre en place des logs pour voir ce qui est renvoyé au client (par exemple en écrivant le résultat de $server->handle() dans un fichier) ?

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 4
    Points : 5
    Points
    5
    Par défaut
    Même erreur
    "faultCode:Client.Error.DeliveryInDoubt"
    , je galère dessus (très peu de sources completes à ce jour)

    Quelqu'un aurait une solution peu être?


    ++

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    268
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 268
    Points : 128
    Points
    128
    Par défaut
    Je suis dessus, déjà pour avoir des codes d'erreurs détaillés

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public function faultHandler(fault:FaultEvent):void{
    			// Alert.show(fault.fault.faultCode.toString(), "FaultHandler");
    	Alert.show(fault.fault.faultDetail.toString(), "FaultHandler");
    }
    sinon, concrètement, ça veut dire que :
    - soit tu as une erreur dans ton code php (crée une classe de test en php pour vérifier)
    - soit tu as une erreur dans ton code AS3 (j'en suis là; au passage d'objets)

    ...

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    268
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 268
    Points : 128
    Points
    128
    Par défaut
    pour le passage d'objets entre Flex et PHP, voir ici http://corlan.org/2008/11/13/flex-an...with-zend-amf/

  6. #6
    Membre actif Avatar de Alshten
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2005
    Messages
    157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2005
    Messages : 157
    Points : 233
    Points
    233
    Par défaut
    Ma réponse ne va pas forcément être très utile mais je déconseille d'utiliser Zend_Amf pour le passage de valeurs entre Flex/Flash et Zend. Personnellement dans le projet que je faisais il y a quelques mois nous utilisions Flex aussi et là j'ai passé des heures à essayer de faire quelque chose avec Zend_Amf sans succès, alors que de passer les paramètres en Json est beaucoup rapide, plus pratique et plus simple.

    Pour cela il suffit d'utiliser json_encode (fonction PHP5) pour sérialiser très simplement des variables PHP en Json. Il existe aussi Zend_Json mais de même, c'est compliqué pour pas grand chose.

    Après je connais pas suffisamment Amf pour savoir si dans certains cas c'est indispensable de l'utiliser. Tout ce que je sais c'est que dans mon cas Json ça marche et Amf ça marche pas.

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    268
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 268
    Points : 128
    Points
    128

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    268
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 268
    Points : 128
    Points
    128
    Par défaut
    avis aux experts :

    je serai curieux de connaitre l'interêt de Zend_serveur_JSON par rapport au traditionnel json_encode de PHP ...

Discussions similaires

  1. [Flex/java] appel d'objet java
    Par mcrbe dans le forum Flex
    Réponses: 3
    Dernier message: 26/05/2010, 13h21
  2. Objet flex non identifié (ofni)
    Par supernova dans le forum Flex
    Réponses: 2
    Dernier message: 14/10/2009, 13h46
  3. Objet Flex dans un projet AS
    Par grav dans le forum EDI/Outils
    Réponses: 1
    Dernier message: 08/09/2008, 18h25
  4. Objet Flex dans un projet AS
    Par grav dans le forum EDI/Outils
    Réponses: 1
    Dernier message: 28/08/2008, 17h00
  5. Passage de paramètres entre flex et php
    Par piopium dans le forum Flex
    Réponses: 2
    Dernier message: 29/07/2008, 18h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo