-
Notifications
You must be signed in to change notification settings - Fork 1
Guide du contributeur
Dans ce guide, on supposera que vous avez les bases d’IO2 concernant PHP, MySQL, HTML et CSS, et que vous connaissez la POO en Java.
La POO en PHP fonctionne globalement de la même façon qu'en Java, seule la syntaxe change:
-
class MaClass {}: déclaration d’une classe, comme en Java -
$this: équivalent dethisen Java -
self: référence la classe courante (pas d’équivalent en Java) -
$this->foo(): équivalent dethis.foo()en Java -
self::foo(): équivalent deMaClass.foo()(appel de fonction statique)
MVC (Modèle/Vue/Contrôleur) est un patron de conception où le programme est divisé en trois parties :
- le modèle : la partie qui gère la base de données
- la vue : la partie qui gère l’interface avec l’utilisateur
- le contrôleur : la partie qui fait le lien entre les deux précédentes
Pour un site Web, la vue désigne les templates (on dit « les vues »), i.e. ces fichiers dans lesquels, en IO2, vous mélangiez HTML et PHP, pour l'affichage à l'utilisateur; le contrôleur désigne les fonctions (on dit « les contrôleurs ») que vous utilisiez pour gérer, par exemple, les envois de formulaires et toute la « logique » du site. Le modèle désigne l’ensemble des fonctions que vous utilisiez pour faire les insertions en MySQL, les SELECT, etc.
Un ORM (Object-Relational Mapping) est un outil qui permet de faire un lien entre des objets (ici, en PHP) et une base de données. Avec ce type d’outil, toutes les opérations de base de données se résument à des appels de méthodes sur des objets. Exemple :
<?php
$user = new User();
$user->setUsername('JBY');
$user->setAge(42);
$user->setRank('admin');
$user->save();
?>Le code précédent est équivalent à :
INSERT INTO users ('username', 'age', 'rank') VALUES('JBY', 42, 'admin');L’ORM se charge également d’« échapper » les caractères spéciaux et du formatage. L’ORM qu’on utilise pour le site s’appelle Propel.
En IO2, votre site avait probablement des URL du type /index.php?page=tralala, et l’affichage de la page dépendait du paramètre $_GET['page']. Ici, c'est pareil, sauf qu’on préfère avoir des URL un peu plus jolies comme /page/tralala. On utilise donc des routes, qui sont des associations entre des URL et des fonctions PHP. Pour chaque URL donnée, une fonction PHP qui retourne une chaîne est appelée, et c’est cette chaîne qui est retournée au navigateur (c’est donc du HTML, dans 99% des cas). Pour gérer ces routes, on utilise Limonade. Limonade permet en fait de gérer un site Web dans son ensemble, mais il est trop léger pour ce qu’on veut faire ici. Les routes sont définies dans le fichier index.php de la façon suivante :
<?php
// associe l'URL '/page/tralala' à la fonction
// affiche_tralala(), quand on appelle l'URL en GET (i.e. "normalement")
dispatch('/page/tralala', 'affiche_tralala');
// associe la même URL à la fonction 'verifie_formulaire' lorsqu'on fait
// une requête POST (i.e. on envoi des données de formulaire).
dispatch_post('/page/tralala', 'verifie_formulaire');
?>Un template est un fichier qui défini ce qui sera affiché à l’utilisateur, et qui contient généralement un squelette en HTML et des variables dont les valeurs sont données par PHP. Exemple :
<html>
<head><!-- … --></head>
<body>
<h1><?php echo($titre); ?></h1>
<p>
<?php echo($texte); ?>
</p>
</body>
?>[À continuer]
Tout le code est écrit en anglais, y compris les commentaires, les fonctions, variables, etc.
[À continuer]: conventions de codage.
Le site est fait en PHP, et les outils utilisés sont les suivants :
- Propel, comme ORM (cf section dédiée)
- Limonade, pour les routes (cf section précédente)
- Twig, pour les templates (cf section dédiée)
- PHPass pour hasher les mots de passes
[À continuer]