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