Quick links: Content - sections - sub sections
EN FR
Quick Search Advanced search
 
Page

  [Opened] Intégration Jelix et AMFPHP/Flash

Posted by Guest on 07/25/2006 22:17

Bonjour
J'ai commencé à utiliser Jelix pour developper mon prochain site. Cependant sur une partie de mon site j'ai une page avec un "client" en flash qui communique avec le serveur via AMFPHP. AMFPHP permet d'appeler depuis le Flash en ActionScript des méthodes distantes qui sont implémentés sur le serveur en PHP.

Mon problème est le suivant : comment utiliser le système des JDao pour communiquer avec la base de données sans passer par le point d'entrée Jelix (contrôleur...) ? J'ai fait des tests non concluants et je pense que pour utiliser les Jdao de Jelix il faut passer obligatoirement par un point d'entrée Jelix sur le serveur (index.php ou autre afin que tous les composants Jelix soient correctement positionnés). Sinon comment procéder pour n'utiliser que la partie Jdao de Jelix dans une appli web? Merci d'avance.

  [Opened] Re: Intégration Jelix et AMFPHP/Flash

Reply #1 Posted by bballizlife on 07/26/2006 09:48

Je ne connais pas du tout AMFPHP mais si je comprends cela te permet des méthodes php.

Pourquoi tu ne veux pas passer par le point d'entrée pour appeler une méthode d'un controller ? Tu as des contraintes ?


N'importe comment c'est dans la doc

  [Opened] Re: Intégration Jelix et AMFPHP/Flash

Reply #2 Posted by Guest on 07/26/2006 11:17

Pour la communication entre Flash et PHP, je suis obligé de passé par gateway.php si j'utilise AMFPHP (qui est vraiment bien pratique).

Code dans l'ActionScript Flash :

 //gateway.php est un composant AMFPHP il va appeller listeResa.php où les méthodes distantes sont définies
 connectionServeur = new Service("http://"+IP_SERVEUR+"/www/echangesFlash/gateway.php", null, "listeResa", null, null);
 
 
 function getListeReservations( date_debut:String, horaire_debut:String, date_fin:String, horaire_fin:String)
 {
	 pcClient = connectionServeur.getListeResa( date_debut, horaire_debut, date_fin, horaire_fin ) ;
	
	//définit les méthodes à appeler en cas de reussite ou d'echec
	pcClient.responder = new RelayResponder(this, "onOk", "onFault");
 }

Ainsi le client flash communique directement avec gateway.php (qui s'occupe des sérialisation/dessérialisation...) puis gateway.php lance la méthode PHP demandée sur le serveur et à la fin cette méthode on quitte en repassant par gateway.php.

Fichier listeResa.php du serveur :

 //-------------------------------------------------------------------------------------------
 include_once("../donnees_amf/util/MethodTable.php");
 include_once("../Reservation.php");
 
 
 
 function listeResa()
 {

	//DEFINITION des méthodes distantes
	 $this->methodTable = MethodTable::create("listeResa");
	 $this->methodTable = array
	 (
		 "getListeResa" => array(
			 "description" => "blabla1",
			 "arguments" => array("date_debut", "date_fin"),
			 "access" => "remote",
			 "returns" => "Array" 
			) ,
		"getNbJo ueursMax" => array(
			 "description" => "blabla2",
			 "access" => "remote",
			 "returns" => "int"
			 )
	 );
 }
 
 function getListeResa( $date_debut, $horaire_debut, $date_fin, $horaire_fin )
 {
	 $tabResa = array( array() );
 
 	 //Connexion à la base de données
 	 //Envoi d'une requete
 	 //Lecture du résultat
 	 //Chargement d'un tableau
  	//[...]
   
 	//Ici j'avais fait des tests d'utilisation de JDao en vain.
 	//Mon dao resaflash avec findAll() fonctionne bien car j'affiche le contenu de la table en HTML tout simplement
 	//Dans l'esprit ça donnait ça:
  
 	//$daoFlash = jDao::get('resaflash');
 	//$listeReservationTerrain = $daoFlash->findAll();
 	
 	//$i=0;
 	//foreach $listeReservationTerrain as $recReservation
 	//{
 	//	$listeJoueurs[$i] = $recReservation->cli_nom;
 	//	$i++;
 	//}
 	//[...]
  
 	//Je me dis qu'il faut passer par le point d'entrée Jelix ?
  
 	return $tabResa ;
 } 
 //-------------------------------------------------------------------------------------------

Bref je suis bien embété, je ne pense pas du coup pouvoir utiliser les JDao. Quelle serait la marche à suivre ?

  [Opened] Re: Intégration Jelix et AMFPHP/Flash

Reply #3 Posted by laurentj on 07/30/2006 00:42

Si j'ai bien compris, ce gateway.php se charge de "décoder" (une déserialisation apparement) les données que lui passe le flash, et de renvoyer les données "réponses" en les serialisant.

En fait, ton gateway.php fait le boulot d'un jRequest et d'un jResponse dans Jelix.

L'idéal, serait donc de faire un jRequestAmfPhp et un jResponseAmfPhp par exemple, qui ferait exactement le même boulot que gateway.php. Et d'avoir un point d'entrée jelix, qui pourrait s'appelait au hasard gateway.php (c'est possible un autre nom ?) utilisant ce jRequestAmfPhp.

Le jRequestAmfPhp, aprés déserialisation, pourrait deviner la "methode", qui pourrait se résumer en fait à une action dans jelix ;-)

Donc, en théorie, rien de compliquer.

La principale intérrogation est : où peut on trouver ce gateway.php ? et est-il suffisement bien conçu pour qu'on puisse reutiliser son code de serialisation/deserialisation ? (est ce qu'il est basé en gros sur des fonctions facilement réutilisable..). Si oui, et d'aprés ce que tu as décrit, l'adaptation se fait en quelques dizaines de minutes. Si par contre il faut se refaire la serialisation/deserialisation...

  [Opened] Re: Intégration Jelix et AMFPHP/Flash

Reply #4 Posted by laurentj on 07/31/2006 13:51

bon, je viens d'aller voir ce que c'est que ce amfphp. Au premier abord, en examinant le source de amfphp, ça n'a pas l'air aussi simple que je pensais.

Si j'ai bien compris, amfphp est presque un framework en lui même. Il semble gérer pas mal de truc par défaut (genre l'authentification entre autres..). Bref, ça me semble difficile de faire une appli jelix qui utilise amfphp...

Par contre, il semble qu'il se base sur un format défini ailleurs, AMF. Donc, si je ne me trompe pas, il suffirait juste d'apporter la capacité à jelix de déserialiser/serialiser les messages AMF pour pouvoir faire du flash remoting php. (corrige moi si je me trompe).

Je pense qu'il "suffirait" de se baser sur les classes du repertoire io/ de amfphp. On ne peut les utiliser directement car elles utilisent plein de trucs de amfphp. Trop de dépendances. Il faudrait donc réécrire un déserialiser et un serializer AMF. Et de les appeler via un jRequestAmf et un jResponseAmf, comme je disais. (voir pour le principe d'intégration dans jelix, jRequestJsonRpc et jResponseRpc)

  [Opened] Re: Intégration Jelix et AMFPHP/Flash

Reply #5 Posted by nORKy on 08/01/2006 14:07

a mon avis, c'est pas possible, car, qui dit jdao, dit jselectorDao et donc, Jcoord pour initialiser les vars global de config. Sans compter que tu as de forte chance d'avoir besoin aussi de jLocale, et donc de jselectorLoc... bref, tous est lié quand même.

  [Opened] Re: Intégration Jelix et AMFPHP/Flash

Reply #6 Posted by Guest on 08/01/2006 17:50

C'est bien ce que je craignais. Et il n'y aurait pas une petite astuce (que je ne connais pas) qui permettrait d'appeler depuis la méthode PHP sur le serveur un contrôleur Jelix (aussi sur le serveur) qui derrière pourrait utiliser les Jdao. Après utilisation des Jdao et traitement le controleur Jelix ferait un genre de redirect vers la méthode qui l'a appelée. Un peu comme un "Filter" pour les servlet je crois. Je fabule ? Merci.

  [Opened] Re: Intégration Jelix et AMFPHP/Flash

Reply #7 Posted by nORKy on 08/02/2006 13:31

Très rare sont les objets que tu peux appeler sans avoir a instancier le coordinateur.. Pour faire simple, aucun module ne peut être "désolidarisé" (a priori) de Jelix

  [Opened] Re: Intégration Jelix et AMFPHP/Flash

Reply #8 Posted by laurentj on 08/02/2006 15:12

bah à la limite, ta fonction appelé par amfphp, elle peut trés bien instancier jCoordinator et un jRequest comme dans les points d'entrées :-)

Le truc qui est à faire c'est un jTrucRequest qui ne récupère rien (pas de $_POST ou autre) éventuellement faire un truc comme jCmdLineRequest mais qui recupère les paramètres parmis ses propriétés. on pourrait alors imaginer un fonctionnement comme ceci :

 require_once ('../../lib/jelix/init.php');
 require_once ('../../monAppPourAmf/application.init.php');
 require_once (JELIX_LIB_CORE_PATH.'request/jTrucRequest.class.php');
 
 function AppelleeParAmfPhp(){
    $config_file = 'config.truc.ini.php';
    $jelix = new jCoordinator($config_file);
    $req= new jTrucRequest();
    $req->params['module'] = 'xxx';
    $req->params['action'] = 'yyy';
    $req->params['zzz'] = 'foo';
    ...
    $jelix->process($req);

    $valeursRetour = $jelix->response->values;
    ...
 }

Et il faudrait faire aussi un jResponseMachin, qui ne génère rien en sorti (pas d'echo ou autre), mais qui sert de "conteneur" pour les valeurs de retours, données par l'action. Dans l'action, ça donnerait un truc comme

  $resp = $this->getResponse('machin');
  $resp->values = array('toto','titi');
  return $resp;

et donc ensuite, dans ta fonction, tu recupère les données via $jelix->response->values et tu les renvoi à amfphp.

Bon, c'est un exemple d'api pour jResponseMachin,, tu peux imaginer une api plus compliquée, mieux adaptée à ta problèmatique..

Une chose à faire attention : je ne sais pas si faire fonctionner à la fois amfphp et jelix en même temps se fait sans problème.. À tester.

  [Opened] Re: Intégration Jelix et AMFPHP/Flash

Reply #9 Posted by niko on 10/16/2006 23:11

Salut

C'est peut etre un peu vieux, mais tu devrais regarder du coté sabreamf qui supporte l'amf0 et amf3, et ne nécessite pas d'instancier la gateway etc, tu peux envoyer et recevoir simplement ce que tu veux :

http://niko.informatif.org/blog/flash_remoting_securite#commentaires

 
Page
  1. Re: Intégration Jelix et AMFPHP/Flash