Première chose à faire, c'est récupérer AMFPHP 1.9. Une fois fait, nous allons donc décompresser l'archive puis la déposer sur un ftp. Dans ce tutoriel, je suppose que mon dossier d'installation de AMFPHP est le suivant : /www/amfphp/. Une fois le dossier déposé, allons vérifier l'installation : http://www.lenomdevotredomaine.com/amfphp/gateway.php, vous devriez avoir ce message :

amfphp and this gateway are installed correctly. You may now connect to this gateway from Flash...

Si ce n'est pas le cas, vous devriez trouver de l'aide sur internet pour les cas particuliers. ou bien poster votre problème en commentaires, je tacherais de vous aider ;)

A présent, nous allons peupler notre base de donnée, le script SQL de ce tutoriel est disponible ici

Maintenant, que nous disposons d'un AMFPHP fonctionnel et d'une base de donnée pleine a craquer :), nous allons coder notre classe PHP qui effectuera la requête vers notre base de données. Je ne rentre pas dans les détails concernant le php... vous pouvez récupérer le script ici(click droit, enregistrer la cible sous) . Il faut bien évidement, remplacer les informations de connexion à votre base (host,utilisateur,motdepasse,table) ;). Voici un extrait du code, ne le copiez pas, il n'est pas complet.

[php]
class Contact {

function getAllContact()
{
$rest = array();

// on se connecte
$link = mysql_connect("host","utilisateur", "motdepasse") or die ("Impossible de se connecter : " . mysql_error());
mysql_select_db("table",$link);

$sql = "SELECT * FROM `amfphp_contact`";
// on envoie la requête
$req = mysql_query($sql) or die('Erreur SQL !'.$sql.''.mysql_error());

// on fait une boucle qui va faire un tour pour chaque enregistrement
while($data = mysql_fetch_assoc($req))
{
$id = $data('id');
$nom = $data('nom');
$prenom = $data('prenom');
$email = $data&('email');
array_push($rest, array("id"=>$id, "nom"=>$nom, "prenom"=>$prenom, "email"=>$email));
}

// on retourne le tableau
return $rest;
}

}

Dans ce tutoriel j'ai créé un dossier test dans le répertoire services de AMFPHP. Placez donc ce script PHP dans le dossier suivant : /www/amfphp/services/test/

Nous allons tester que notre script PHP fonctionne correctement, pour cela nous allons utiliser le très utile browser de AMFPHP, il se trouve à cette adresse : http://www.lenomdevotredomaine.com/amfphp/browser/, vous devriez voir a gauche dans l'arborescence un dossier test, et votre classe Contact, cliquez sur celle-ci, puis dans le panneau principal, appuyez sur call. Vous obtiendrez normalement dans le panneau du bas les enregistrements de votre base, comme ceci :

si ca ne fonctionne pas, vérifiez vos identifiant de connexion à votre base...

Voila, maintenant il ne vous reste plus que la partie Flex à mettre en place. Pour cela, créez un nouveau projet sous Flex Builder. Ensuite, créez un fichier services-config.xml à la racine de votre projet(répertoire au dessus de src ;) ). Ce fichier doit contenir ceci (n'oubliez pas de modifier l'url vers votre install d'AMFPHP):

[xml]
<services-config>
<services>
<service id="amfphp-flashremoting-service"
class="flex.messaging.services.RemotingService"
messageTypes="flex.messaging.messages.RemotingMessage">
<destination id="amfphp">
<channels>
<channel ref="my-amfphp"/>
</channels>
<properties>
<source>*</source>
</properties>
</destination>
</service>
</services>

<channels>
<channel-definition id="my-amfphp" class="mx.messaging.channels.AMFChannel">
<endpoint uri="http://www.lenomdevotredomaine.com/amfphp/gateway.php" class="flex.messaging.endpoints.AMFEndpoint"/>
</channel-definition>
</channels>
</services-config>

Ensuite, indiquez le chemin vers ce fichier au compilateur. Pour ce faire, il faut ajouter une variable de compilation, click droit sur votre projet->Properties->Flex Compiler: ajoutez -services "..\services-config.xml" dans la zone de texte Additional compiler arguments.

Puis, dans votre fichier*.mxml, il vous faut mettre en place vos composants qui vous serviront à afficher les résultats, voici un simple exemple:

[xml]
<mx:VBox horizontalAlign="center">
<mx:Button label="Récupérer les contacts"
click="myservice.getOperation('getAllContact').send();" />

<mx:DataGrid id="myDataGrid">
<mx:columns>
<mx:DataGridColumn dataField="id" headerText="id"/>
<mx:DataGridColumn dataField="nom" headerText="nom"/>
<mx:DataGridColumn dataField="prenom" headerText="prenom"/>

<mx:DataGridColumn dataField="email" headerText="email"/>
</mx:columns>
</mx:DataGrid>
</mx:VBox>

Comme vous le voyez déjà, note bouton va faire l'appel a notre classe PHP, mais pour cela il nous manque le plus important , le RemoteObject :

[xml]
<mx:RemoteObject id="myservice" fault="faultHandler(event)" showBusyCursor="true"
source="test.Contact" destination="amfphp">
<mx:method name="getAllContact" result="resultHandler(event)" fault="faultHandler(event)"/>
</mx:RemoteObject>

On peut noter que la source de notre RemoteObject pointe vers notre classe Contact dans le dossier test. Il ne reste qu'à coder nos méthodes de résultat et d'erreur(toujours utile):

[actionscript]
import mx.controls.Alert;
import mx.rpc.events.FaultEvent;
import mx.rpc.events.ResultEvent;

private function resultHandler (evt:ResultEvent):void
{
myDataGrid.dataProvider = evt.result;
}

private function faultHandler (fault:FaultEvent):void
{
Alert.show("code:
" + fault.fault.faultCode + "

Message:
" + fault.fault.faultString + "

Detail:
" + fault.fault.faultDetail);
}

Vous voyez que ma méthode resultHandler alimente le dataProvider de mon DataGrid avec le résultat. Etant donné que mon résultat est un tableau d'objet(id,nom,prenom,email), on voit l'utilité de la propriété dataField dans la déclaration de mon DataGrid.

Voila, tout y est, pour finir, je vous propose une petite démonstration (les sources sont disponible avec le click droit), si vous avez des questions, postez un commentaire ;):