Etape 1 : Installation et démarrage
- Installer composer, puis dans le répertoire de votre projet sur le serveur web en PHP7, grâce à une invite de commande, exécuter composer require slim/slim “3”
- Ajouter un fichier .htaccesss qui contient le code suivant dans le repertoire de votre projet:
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^ index.php [QSA,L] Header set Access-Control-Allow-Origin "*" Header set Access-Control-Allow-Methods: "POST,GET,OPTIONS" Header set Access-Control-Allow-Headers "Origin, X-Requested-With, Content-Type, Accept"
- Réaliser une page qui appelle une URL ‘bonjour’ sur le serveur SLIM avec la méthode GET. On pourra s’aider de l’extension RESTED de Firefox.
- Le serveur devra renvoyer bonjour qui sera affiché par la page d’appel
Exemple de code client
$( document ).ready(function() { $('#btn-valide').click(function(){ $.ajax({ type: "POST", contentType: 'application/json; charset=utf-8', url: "http://localhost/serveur/gateau, success: function(data){ alert("gateau"); } }); }); });
Exemple de code serveur
<?php require 'vendor/autoload.php'; use \Psr\Http\Message\{ServerRequestInterface as Request,ResponseInterface as Response}; $app = new \Slim\App; $app->post('/zaza', function(Request $request, Response $response){ return "wazaaaaaaaa"; }); $app->run(); ?>
Etape 2 : Récupération d’information via l’URL
- Réaliser une page formulaire.html qui permette de saisir un login et un mot de passe.
- Récupérer les informations sur SLIM grâce à une page index.php et renvoyer les 2 valeurs au navigateur.
Exemple de code client
$( document ).ready(function() { $('#btn-new-liste').click(function(){ let idx=$('#idx').val(); $.ajax({ type: "GET", url: "http://localhost/serveur/gateau/"+idx, success: function(data){ $("#result").html(data); } }); }); });
Exemple de code serveur
$app->get('/gateau/{id}', function(Request $request, Response $response){ $id = $request->getAttribute('id'); return $id; });
Etape 3 : Récupération d’information via des paramètres dans l’URL
- Réaliser un formulaire de création d’un client.
- Envoyer les informations à SLIM en JSON avec la méthode POST.
- Récupérer les informations sur le serveur SLIM
- Réaliser une insertion du client grâce à une requête SQL sur le serveur SLIM.
Exemple de code client
$('#btn-valide').click(function(){ let id=$('#id').val(); let nom=$('#nom').val(); $.ajax({ type: "POST", contentType: 'application/json; charset=utf-8', url: "http://localhost/serveur/gateau?id="+id+"&nom="+nom, success: function(data){ //gateau enregistré alert("gateau enregistré"); } }); });
Exemple de code serveur
$app->post('/gateau', function(Request $request, Response $response){ $id = $request->getQueryParam('id'); $nom = $request->getQueryParam('nom'); //fonction d'insertion return setGateau($id, $nom); }); function connexion() { /*IBM Cloud * $vcap_services = json_decode($_ENV['VCAP_SERVICES'], true); * $uri = $vcap_services['compose-for-mysql'][0]['credentials']['uri']; * $db_creds = parse_url($uri); * $dbname = "patisserie"; * $dsn = "mysql:host=" . $db_creds['host'] . ";port=" . $db_creds['port'] . ";dbname=" . $dbname; * return $dbh = new PDO($dsn, $db_creds['user'], $db_creds['pass'],array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8')); * */ //autre return $dbh = new PDO("mysql:host=localhost;dbname=patisserie", 'root', '', array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8')); } function setGateau($id, $nom) { $sql = "INSERT INTO gateau VALUES(:id, :nom))"; try { $dbh = connexion(); $req = $dbh->prepare($sql); $res = $req->execute(array( ':id' => $id, ':nom' => $nom, )); return $res; } catch (PDOException $e) { return '{"error":' . $e->getMessage() . '}}'; } } $app->run();
Etape 4 : Envoie d’information en JSON depuis le serveur
- Permettre lors de l’appel de l’url clients d’afficher tous les clients. Le serveur SLIM renverra un tableau en JSON.
Exemple de code client
$('#btn-valide').click(function(){ $.ajax({ type: "GET", contentType: 'application/json; charset=utf-8', url: "http://localhost/serveur/gateaux, success: function(data){ alert(data); } }); });
Exemple de code serveur
$app->get('/gateaux', function(Request $request, Response $response){ return getGateaux(); }); function getGateaux() { $sql = "SELECT * FROM gateau"; try{ $dbh=connexion(); $statement = $dbh->prepare($sql); $statement->execute(); $result = $statement->fetchAll(PDO::FETCH_CLASS); return json_encode($result, JSON_PRETTY_PRINT); } catch(PDOException $e){ return '{"error":'.$e->getMessage().'}}'; } }
Etape 5 : Documentation
Utiliser Swagger pour générer une documentation
https://swagger.io/
https://github.com/zircote/swagger-php
/** * @SWG\Swagger( * schemes={"https"}, * host="mybluemix.net", * basePath="/gateau", * @SWG\Info( * version="1.1.0", * title="API Gatêau", * description="Enregistrement et affichage de Gâteaux", * @SWG\Contact( * email="zaza" * ), * @SWG\License( * name="Apache 2.0", * url="http://www.apache.org/licenses/LICENSE-2.0.html" * ) * ), * ) */ /** * @SWG\Tag( * name="gateau", * description="Operations about gateau", * ) */ $app = new \Slim\App; error_reporting(E_ALL); ini_set('display_errors', 1); /** * @SWG\Post( * path="/gateau", * tags={"gateau"}, * summary="Inserer un gateau", * description="Inserer un gateau", * @SWG\Parameter( * name="id", * in="header", * required=true, * type="integer" * ), * @SWG\Parameter( * name="nom", * in="header", * required=true, * type="string" * ), * @SWG\Response( * response=200, * description="successful operation", * @SWG\Schema( * type="object" * ), * ) * ) */ $app->post('/gateau', function(Request $request, Response $response){ //$gateau = json_decode($request->getBody()); $id = $request->getQueryParam('id'); $nom = $request->getQueryParam('nom'); return setGateau($id, $nom); });