Exercice Espace membre
Transcription
Exercice Espace membre
Exercice Espace membre - CakePHP Réalisé par : Abdel BEDJBEDJ, Maxence CHAZARRA, Sébastien WALLART Prérequis : Avoir un serveur PHP avec une version de PHP supérieur ou égale à 5.5.3 ; Avoir une base de données ; Avoir le package de base, disponible ici : http://we.tl/fc1A9IfGl6 ! http://deptinfo.unice.fr/~renevier/webL3Miage/exercices/serveur/WallStweet.zi p (pour info version de base de cake : https://github.com/cakephp/cakephp/tags ) Le but de cet exercice est d'obtenir un espace membre. Pour cela, on souhaite implémenter 4 fonctionnalités : Accéder à l'espace membre ; S'inscrire ; Se connecter ; Se déconnecter ; Notre modèle de données est basé sur un utilisateur ayant les caractéristiques suivantes: un identifiant ; un username ; un password ; L3 MIAGE 2 1ère étape : Création de la table et connexion à la base de données Nous allons créer la table dans la base de données. Pour cela, soit via l'interface graphique, soit par un code de type SQL, il faut créer une table avec les caractéristiques suivantes : La table doit se nommer "users" ; La table "users" doit contenir les champs suivants : Un champ "id" de type int, NOT_NULL, avec un AUTO_INCREMENT ; Un champ "username" de type varchar, de longueur 255, NOT_NULL ; Un champ "password" de type varchar, de longueur 255, NOT_NULL ; Le champ "id" doit être indiqué comme PRIMARY KEY. Ensuite pour réaliser la connexion entre votre application et la base de données, il faut modifier le fichier "database.php" qui se trouve dans le dossier "app/Config/". Une fois le fichier ouvert, modifier l'array $default avec les paramètres correspondant à votre base de données. Enregistrer le fichier une fois modifié. L3 MIAGE 3 2ème étape : Création du Model Cette étape va consister à créer le modèle de notre architecture MVC. L'entité centrale de l'espace membre, c'est évidemment le membre. Pour respecter les conventions de CakePHP vis à vis du nom de notre table créée précédemment, nous allons nommer ce fichier "User.php". Le fichier "User.php" doit contenir la classe "User" qui hérite de "AppModel". En somme, votre fichier doit contenir la déclaration de classe suivante : "class User extends AppModel". On pourrait laisser le Model vide, car CakePHP (grâce au respect de la convention de nommage notamment) arrive à faire le lien avec la table contenue dans votre base de données. Néanmoins, nous allons utiliser une fonctionnalité très utile de CakePHP : la validation. Comme toutes les données transitent par le Model, on peut imaginer que lorsque quelqu'un s'inscrit au site, on souhaiterai que son pseudo soit unique, qu'il fasse une longueur spécifique, etc ... Et CakePHP nous permet de réaliser cette validation de façon simplifiée. Dans votre class "User", vous devez déclarer un champ public nommé "$validate". Pour simplifier l'exercice, nous vous donnons les règles de validation que nous avons établis. Vous devez donc avoir à l'intérieur de votre class "User" le code suivant : public $validate = array( 'username' => array( 'alphaNumeric' => array( 'rule' => 'alphanumeric', 'message' => 'Votre pseudo doit contenir des lettres et/ou des chiffres uniquement.', 'required' => true, 'allowEmpty' => false ), 'between' => array( 'rule' => array('between', 1, 50), 'message' => 'La longueur de votre pseudo doit être comprise entre 1 et 50 caractères.' ), 'isUnique' => array( 'rule' => 'isUnique', 'message' => 'Ce pseudo est déjà pris.' ) ), 'password' => array( 'between' => array( 'rule' => array('between', 5, 10), 'message' => 'La longueur de votre password doit être comprise entre 5 et 10 caractères.' ) ) ); L3 MIAGE 4 Les règles ci-dessus expliquent : Pour le champ "username" : Le champ doit contenir des chiffres et/ou des lettres uniquement ; Le champ est obligatoire ; Le champ ne peut pas être vide ; Le champ doit avoir une longueur comprise entre 5 et 50 caractères ; Le champ doit être unique ; Pour le champ "password" : Le champ doit avoir une longueur comprise entre 5 et 10 caractères ; L3 MIAGE 5 3ème étape : Explication sur les Vues Nous vous fournissons toutes les vues afin de réduire le temps de réalisation de l'exercice. Néanmoins, il est important de regarder le code des fichiers "login.ctp" et "signup.ctp" qui se trouvent dans le dossier "app/View/Users/". L'extension ".ctp" est une convention de CakePHP, ces fichiers contiennent du HTML ainsi que du PHP. Ces deux fichiers vont "s'intégrer" au Layout par défaut contenu dans "app/View/Layouts". Ainsi pour la page de login, il faut regarder le code contenu dans "login.ctp". On peut ainsi remarquer que le formulaire du login est généré par la bibliothèque de CakePHP, et l'utilisation d'un flash, c'est à dire d'un message d'erreur (ci un message d'erreur existe). L3 MIAGE 6 4ème étape : Le routing CakePHP met à disposition un routeur, et effectue donc un url-rewriting. Nous allons nous en servir pour une question fonctionnelle, mais également pour une question d'esthétisme. Il faut modifier le fichier "routes.php" contenu dans "app/Config/". Pour ajouter une règle de routing, il faut utiliser la fonction statique "connect" de la classe "Router". Ainsi, comme première règle de routing, nous allons avoir : "Router::connect('/', array('controller' => 'users', 'action' => 'index'));" Ainsi, lorsque on est à la racine du site, on effectue l'action "index" contenue dans le controller "users". On souhaite également effectuer les routing suivants : Pour "/login", on souhaite rediriger vers l'action "login" du controller "users" ; Pour "/signup", on souhaite rediriger vers l'action "signup" du controller "users" ; Pour "/logout", on souhaite rediriger vers l'action "logout" du controller "users" ; L3 MIAGE 7 5ème étape : Le contrôleur Le contrôleur "UsersController.php" doit être créer dans le dossier "app/Controller/", avec le contenu suivant : <?php class UsersController extends AppController { } Ensuite, comme on peut le déduire suite aux règles de routing écrites précedemment, le routeur aura 4 actions : index login logout signup Chaque action est représentée par une méthode publique. Ainsi, on a : <?php class UsersController extends AppController { public function index() {} public function login() {} public function logout() {} public function signup() {} } Pour vous simplifier le travail, nous vous fournissons une version complète du UsersController. Cette correction est disponible dans le fichier "app/Controller/CorrectionUsersController.php". Copier cette solution dans le fichier "UsersController.php" récemment créé. Néanmoins, il est important de lire les commentaires pour comprendre le fonctionnement du controller en fonction des actions. L3 MIAGE 8