Maintenant que les bases sont posées, commençons à réfléchir à l'organisation des fichiers sur le FTP. Personnellement, j'entrevois plusieurs solutions. Dans tous les cas, le principe sera de séparer les trois éléments :
modèle,
vue et
contrôleur (parce que ça ne fait pas de mal de les réécrire une fois de plus

).
Organisation simple
La solution la plus simple est de créer trois dossiers :
modeles,
vues et
controleurs. Dans chacun de ces dossiers, vous mettrez l'élément correspondant.
À partir de là, vous avez deux solutions pour gérer les appels de fichiers. Vous pouvez donc soit appeler directement le contrôleur depuis l'URL, avec une adresse de la sorte :
soit l'appeler en passant par un
index.php faisant le lien entre les contrôleurs avec une adresse de la forme :
Dans le premier cas, il faudra que votre contrôleur et / ou votre vue inclue(nt) les éléments communs à votre site (connexion à la BDD, en-tête, pied de page, etc.). Dans le deuxième cas, c'est l'
index.php qui effectue toutes les initialisations, qui vérifie si le contrôleur existe bien (pour empêcher un piratage) et l'inclut si tel est le cas. Pour ma part je vous conseille la seconde solution qui permet d'éviter des duplications de code inutiles. Vous pouvez commencer à coder directement dans votre fichier, puisque toutes vos initialisations sont faites dans l'index.php ! De plus, combiné avec de l'
url rewriting, les adresses pourront être plus jolies (pour les visiteurs mais aussi les moteurs de recherche).
Voici un exemple d'un fichier d'index type :
Code : PHP 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 | <?php
//On démarre la session
session_start();
//On se connecte à MySQL
mysql_connect('localhost', 'root', '');
mysql_select_db('tests');
//On inclut le logo du site et le menu
include 'vues/logo.php';
include 'vues/menu.php';
//On inclut le contrôleur s'il existe et s'il est spécifié
if (!empty($_GET['page']) && is_file('controleurs/'.$_GET['page'].'.php'))
{
include 'controleurs/'.$_GET['page'].'.php';
}
else
{
include 'controleurs/accueil.php';
}
//On inclut le pied de page
include 'vues/pied.php';
//On ferme la connexion à MySQL
mysql_close();
|
Ce fichier est très simple et pas encore très sécurisé, mais il peut très bien vous servir de base de travail si vous décidez de procéder avec cette méthode.
Une autre organisation possible
Cette variante est similaire à l'organisation utilisée avec un moteur de templates. D'ailleurs, si vous comptez en adjoindre un (voir la dernière partie), vous devriez songer à l'utiliser.
La principale différence est que vous allez mettre tous les contrôleurs à la racine du site. Vous noterez que pour les appeler, vous aurez encore le choix entre les deux méthodes (voir ci-dessus pour plus de détails). Il vous faudra ensuite deux autres dossiers pour y mettre les vues et les modèles. Vous les nommerez comme vous le désirez, mais sachez que la majorité des moteurs de templates exigent qu'on les nomme '
templates' (original

), quoique ce paramètre peut très souvent être modifié. Vous vous retrouvez alors avec une structure quelque peu différente, avec plus de fichiers à la racine, mais qui pourra peut-être paraître plus logique à certains.
Redirections
Certains m'ont fait la remarque du problème posé par les redirections, j'en parle donc ici. Comme vous le savez, une redirection se fait habituellement en PHP avec un :
Code : PHP | <?php header('Location: cible.php'); ?>
|
Or un tel appel de fonction
ne peut pas être mis si quelque chose a déjà été envoyé au navigateur. Pour cela, et dans l'optique de garder l'organisation actuelle, une seule solution : la tamporisation de sortie (
tutoriel d'Alex ici). Globalement, vous mettez un
ob_start en début de script, un
ob_end_flush en fin, et vous pouvez, entre les appels à ces deux fonctions, insérer divers éléments habituellement interdits en milieu de fichiers PHP comme des
setcookie et des
header.
Cependant, je n'emploierai pas cette technique par la suite, pour simplifier les choses. Sachez simplement qu'elle existe et qu'elle peut être très utile.
En conclusion
Vous choisissez l'organisation que vous voulez, voire une autre de votre cru. Le principal est que vous soyez à l'aise avec. Un petit conseil pendant que j'y suis : protégez les répertoires des vues et des modèles avec un
.htaccess. Si vous employez la méthode à base de
index.php?page=, protégez aussi le répertoire des contrôleurs (si celui-ci n'est pas la racine

). Cela pourra éventuellement éviter quelques piratages.
Pour plus d'infos sur la création et l'utilisation des
.htaccess :
le tutoriel officiel de M@teo21 et
un tutoriel de kozo sur les usages de ce fichier bien particulier.