Un tutorial sur Flex 2 avec AMFPHP 1.9 (2/3)
Par Phiphou, samedi 19 mai 2007 à 10:56 :: Flex :: #77 :: rss
Maintenant que nous savons faire voyager différents type de données entre php et flex, voyons ce que cela donne avec des objets persos.
Oui, vous avez bien lu. Nous allons pouvoir travailler avec des objets de notre cru, aussi bien du côté php que du côté flex.
Pour l'exemple, nous allons travailler avec un objet très simple. Il s'agit d'un objet 'User' qui contient 3 propriétés. Nous allons devoir créer 2 versions de cet objet : une côté php, une autre côté flex. Ecrivons d'abord ces objets :
Coté Flex, User.as :
package com.phiphou.application { [Bindable] public dynamic class User { public var login:String; public var pswd:String; public var logged:Boolean; public function User() { } } }
Comme le chemin de cette classe nous l'indique, ce fichier devra se trouver dans le dossier phiphou/com/phiphou/application/
Coté PHP, User.php :
<?php class User { var $login; var $pswd; var $logged; function User() { } } ?>
Attention, cet objet devra se trouver dans un dossier phiphou/amfphp/services/vo/com/phiphou/application/
Ecrivons maintenant côté Flex l'appel à notre service :
<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" > <mx:RemoteObject id="services" destination="amfphp" source="ServiceClass"> <mx:method name="sendUserObjectToPHP" result="sendUserObjectToPHP_resultHandler(event)" fault="faultHandler(event)"/> </mx:RemoteObject> <mx:Script> <![CDATA[ import com.phiphou.application.User; import mx.rpc.events.FaultEvent; import mx.rpc.events.ResultEvent; import mx.controls.Alert; /** * handleFault * Si erreur, on l'affiche */ private function faultHandler(fault:FaultEvent):void { Alert.show(fault.fault.faultString, fault.fault.faultCode.toString()); } /** * sendUserObjectToPHP * Appel de la methode sendUserObjectToPHP de notre classe PHP */ public function sendUserObjectToPHP() :void { var u:User = new User(); u.login = "bob"; u.pswd = "007" services.getOperation('sendUserObjectToPHP').send(u); } /** * sendToPHP_resultHandler * Résultat pour sendToPHP */ private function sendUserObjectToPHP_resultHandler(evt:ResultEvent) :void { infos.text = evt.result.toString(); } ]]> </mx:Script> <mx:TextArea x="10" y="10" id="infos" height="72"/> <mx:Button x="10" y="90" label="Appel du service" click="sendUserObjectToPHP()"/> </mx:Application>
Ce service crée côté Flex un objet de type User et l'envoie à php. Php nous renverra true si l'objet qu'il reçoit est bien reconnu par php comme objet de type User.
Testons :

Nous obtenons "False". Apparemment, php ne reconnait pas l'objet reçu comme étant de type User. Il y une raison à cela. En effet, nous devons spécifier dans les objets leur type respectif, comme ceci :
Côté PHP :
<?php //Objet User "mappé" avec l'objet 'User' de Flex class User { //on indique le type d'objet var $_explicitType = "com.phiphou.application.User"; var $login; var $pswd; var $logged; function User() { } } ?>
Côté Flex :
package com.phiphou.application { //Notre objet User "mappé" avec son équivalent php [RemoteClass(alias="com.phiphou.application.User")] [Bindable] public dynamic class User { public var login:String; public var pswd:String; public var logged:Boolean; public function User() { } } }
Testons à nouveau notre application :

Nous obtenons alors "true", ce qui signifie que php reconnait bien l'objet envoyé par Flex comme étant de type User.
Voyons maintenant si cela fonctionne dans l'autre sens. Nous allons partir du code existant, et le modifier afin que php modifie une des propriétés de l'objet reçu puis renvoie à Flex cet objet modifié. Flex devra alors reconnaitre cet objet envoyé par php comme étant de type User et pourra lire la propriété de l'objet modifiée par php.
Modifions donc notre service côté php :
function sendUserObjectToPHP($u) { $u->logged = true; return $u; }
Et côté Flex, nous modifions notre fonction de retour comme ceci:
private function sendUserObjectToPHP_resultHandler(evt:ResultEvent) :void { var u:User = evt.result as User; infos.text = u.logged.toString(); }
Testons à nouveau notre application :

Nous obtenons alors "true", ce qui signifie que php a modifié la propriété "logged" de l'objet User à true (initialement false). Flex a reconnu cet objet comme étant de type User et a pu lire la propriété de l'objet modifiée par php.
Nous pouvons donc partager entre Flex et PHP des classes persos : c'est ce qu'on appelle du ClassMapping.
Attention : Dans les classes pour les VO, les propriétés $_explicitType et [RemoteClass(alias=... doivent correspondre aux chemins vers lesdites classes, côté Flex et côté PHP.
Dans la TROISIÈME ET DERNIÈRE PARTIE de ce tutorial, nous allons voir deux autres types de données que l'on peut manipuler, et voir comment utiliser amfphp en production.

Commentaires
1. Le mardi 6 novembre 2007 à 18:09, par OSteEL
2. Le mardi 6 novembre 2007 à 23:40, par Phiphou
3. Le mercredi 7 novembre 2007 à 14:49, par OSteEL
4. Le mercredi 7 novembre 2007 à 16:31, par Phiphou
5. Le mercredi 7 novembre 2007 à 16:36, par OSteEL
6. Le lundi 21 janvier 2008 à 12:02, par Slyce
7. Le mardi 22 janvier 2008 à 12:06, par Phiphou
8. Le jeudi 6 mars 2008 à 17:06, par etudiante
9. Le jeudi 6 mars 2008 à 17:13, par etudiante
10. Le lundi 17 mars 2008 à 01:19, par Phiphou
11. Le mardi 18 mars 2008 à 00:05, par matth
12. Le mardi 18 mars 2008 à 18:29, par Phiphou
13. Le lundi 28 avril 2008 à 14:45, par Madiara AMAR
14. Le lundi 28 avril 2008 à 16:26, par Phiphou
15. Le mardi 29 avril 2008 à 00:09, par Madiara
16. Le mardi 29 avril 2008 à 16:45, par Phiphou
17. Le vendredi 9 mai 2008 à 16:40, par shuriken
18. Le samedi 10 mai 2008 à 12:47, par Phiphou
19. Le dimanche 11 mai 2008 à 12:09, par shuriken
20. Le dimanche 11 mai 2008 à 13:15, par Phiphou
21. Le dimanche 11 mai 2008 à 14:05, par shuriken
22. Le dimanche 11 mai 2008 à 17:01, par Phiphou
23. Le dimanche 11 mai 2008 à 17:24, par shuriken
24. Le mercredi 4 juin 2008 à 15:52, par OSteEL
25. Le mercredi 4 juin 2008 à 21:06, par Phiphou
26. Le mercredi 4 juin 2008 à 21:49, par OSteEL
27. Le jeudi 5 juin 2008 à 00:03, par Phiphou
28. Le jeudi 5 juin 2008 à 11:58, par OSteEL
29. Le jeudi 5 juin 2008 à 21:05, par Phiphou
30. Le vendredi 6 juin 2008 à 10:45, par OSteEL
31. Le samedi 7 juin 2008 à 13:18, par Phiphou
32. Le lundi 9 juin 2008 à 12:03, par OSteEL
33. Le lundi 9 juin 2008 à 12:08, par OSteEL
34. Le lundi 9 juin 2008 à 12:31, par Phiphou
35. Le lundi 9 juin 2008 à 14:50, par OSteEL
36. Le lundi 9 juin 2008 à 16:04, par OSteEL
37. Le lundi 9 juin 2008 à 21:33, par Phiphou
38. Le mardi 10 juin 2008 à 14:22, par Phiphou
39. Le mercredi 11 juin 2008 à 09:51, par Imarkahann
40. Le mercredi 11 juin 2008 à 18:46, par Imarkahann
41. Le mercredi 11 juin 2008 à 20:58, par Phiphou
42. Le jeudi 12 juin 2008 à 10:11, par Imarkahann
43. Le jeudi 12 juin 2008 à 21:18, par Phiphou
44. Le vendredi 4 juillet 2008 à 12:33, par Tomaso
45. Le vendredi 4 juillet 2008 à 19:57, par Phiphou
46. Le mardi 8 juillet 2008 à 12:18, par de-baz_b@epitech
47. Le mardi 8 juillet 2008 à 14:16, par de-baz_b@epitech
48. Le mardi 8 juillet 2008 à 20:28, par Tomaso
49. Le mardi 8 juillet 2008 à 21:19, par Phiphou
50. Le mercredi 9 juillet 2008 à 01:12, par de-baz_b@epitech
51. Le mercredi 9 juillet 2008 à 11:34, par Tomaso
52. Le samedi 20 septembre 2008 à 00:13, par Maskime
53. Le mardi 17 mars 2009 à 12:54, par Zou
54. Le jeudi 4 juin 2009 à 09:51, par squall
55. Le mardi 16 juin 2009 à 11:29, par lucest
56. Le lundi 1 février 2010 à 17:11, par Mr Monstre
Ajouter un commentaire