Codeigniter
Codeigniter
Codeigniter
Comme tous les sites, lorsque l'internaute va sur votre site, c'est le fichier index.php qui est appelé.
C'est bien sûr toujours le cas avec CodeIgniter. Schématiquement, ce fichier va instancier une classe :
un contrôleur. C'est à partir de ce contrôleur que vous pourrez appeler le modèle, vous permettant
de récupérer des données, puis la vue, pour retourner ces données formatées en HTML.
Le modèle MVC utilisé par CodeIgniter est remarquablement standard. En voici une représentation.
Explications :
L'internaute envoie une requête au serveur en tapant une URL dans son navigateur. Un système de
route très simple permet d'associer un contrôleur à cette url.
Le contrôleur appelle un modèle (une classe PHP en fait). Le rôle de ce dernier est de récupérer des
données (souvent dans la base de données). Cette étape n'est pas nécessaire si vous ne souhaitez pas
récupérer de données.
Le contrôleur appelle la vue, qui va se charger d'intégrer les données dans le HTML.
Le HTML final est envoyé à l'utilisateur afin qu'il puisse consulter le site normalement.
L'arborescence de CodeIgniter
system : c'est le dossier qui contient le cœur de CodeIgniter. Vous ne devez jamais modifier son
contenu !
user_guide : la même doc que celle disponible en ligne. Vous pouvez supprimer
ce dossier.
.gitignore : ce fichier est utilisé pour les serveurs git. Vous pouvez le supprimer.
.travis.yml : ce fichier est utilisé pour les tests travis. Vous pouvez le supprimer.
index.php : c'est le fichier que l'internaute appellera lorsqu'il se connectera à votre site. Il est très
important, à ne pas toucher.
Voici donc, après un peu de nettoyage, les dossiers et le fichier qu'il nous reste. Simple non ?
application
system
index.php
Le dossier Application
Le dossier application est celui dans lequel nous allons passer tout notre temps. Comme vous pouvez
le voir, il a de nombreux sous-dossiers. Voici ceux qui vont nous intéresser. Ignorez les autres
dossiers pour le moment, nous y reviendrons plus tard.
Les contrôleurs
Les contrôleurs représentent le cœur de votre application. Ils vont faire le lien entre les données et
l'affichage. Ils seront la "logique" de votre application.
Dans le dossier controllers vous trouverez un fichier welcome.php, ouvrez le. Plusieurs choses nous
intéresse :
$this->load->view('welcome_message');
Nous voyons qu'il s'agit d'une classe ayant le nom Welcome. Elle hérite de CI_Controller.
CI_Controller est une classe native de CodeIgniter permettant d'implémenter le fonctionnement
global des contrôleurs. Tous vos contrôleurs devront donc être obligatoirement être des enfants de
cette classe.
Cette classe ne contient qu'une méthode index qui exécute une ligne bien étrange.
$this->load->view('welcome_message');
Nous voyons que cette ligne appelle la fonction view d'un objet load. Cette objet est déclaré dans
CI_Controller. En fait, cette ligne est juste l'équivalent d'un include de PHP. Disons que c'est un
include boosté.
En clair, la fonction index charge simplement une vue nommée welcome_message et l'affiche à
l'écran. Tout ça en une seule ligne !
Si vous avez bien suivi, vous vous demandez certainement comment ça se fait que lorsque vous allez
sur votre site c'est le contrôleur Welcome qui est chargé.
En fait, CodeIgniter utilise un système de routes très simple. Le contrôleur est directement renseigné
dans l'url.
Le slash permet de séparer les urls en plusieurs segments. Les voici sous forme de liste :
http://www.monsite.com
index.php
utilisateur
profil
Le deuxième est le nom de fichier index.php. Il est nécessaire pour le fonctionnement du framework,
mais nous verrons une astuce pour le masquer juste après.
Le troisième segment correspond au contrôleur que nous allons appeler. Ici, il s'agirait du contrôleur
Utilisateur.
Le troisième segment correspond au contrôleur que nous allons appeler. Ici, il s'agirait du contrôleur
Utilisateur.
Le quatrième, quant à lui, correspond à la méthode que l'on souhaite appeler. Elle doit bien entendu
être présente dans le contrôleur précédent. A noter que les méthodes doivent nécessairement être
publiques pour être appelée.
// La méthode profil qui sera appelé a un paramètre "$id". Dans notre exemple, il vaudra 1.
}
}
Si vous nommez votre méthode index, il ne sera pas nécessaire de spécifier son nom dans l'url. Ainsi,
cette url : www.monsite.com/utilisateur appellerait la fonction index du contrôleur utilisateur.
CodeIgniter prévoit bien sûr le cas. Dans la configuration de notre site, nous pouvons lui spécifier
quel contrôleur sera appelé si aucun n'est spécifié. Ouvrez le fichier application/config/routes.php et
regardez cette ligne :
$route['default_controller'] = "welcome";
Elle spécifie que le contrôleur welcome est utilisé par défaut. Comme vous vous en doutez, c'est la
méthode index de ce contrôleur qui sera appelée.
Vous pouvez supprimer le index.php de l'url avec un petit code à mettre dans le .htaccess à la racine
de votre site :
RewriteEngine on
Cette ligne
$config['index_page'] = "index.php";
est à remplacer par celle-ci
$config['index_page'] = "";
Les vues
Si vous vous rendez dans le dossier views dans application, vous verrez la vue welcome_message,
ouvrez la. Vous trouvez une page HTML toute simple. C'est celle-ci qui est affichée à l'écran lorsque
vous affichez le site.
Comment ça marche ?
Une vue est tout simplement un fichier .php qui va contenir le html de votre page. L'idée est
d'appeler la vue depuis le contrôleur afin de lui envoyer des données préalablement récupérées. La
vue se chargera d'intégrer ces données dans le format HTML classique.
Comme en PHP, il est possible d'imbriquer (include) les vues entre elles. L'idée étant bien sûr d'éviter
au maximum la redondance.
Comme nous l'avons vu précédemment, l'affichage d'une vue est assez simple, une seule ligne suffit
dans le contrôleur.
$this->load->view('welcome_message');
Bien entendu, pour mieux s'organiser, vous pouvez créer des sous dossiers dans le dossier views. Il
est tout à fait possible d'appeler la vue application/views/utilisateur/profil.php en utilisant le code
suivant :
$this->load->view('utilisateur/profil');
La fonction view() prend d'autres paramètres. Comme nous l'avons vu, le premier est le nom de la
vue. Le deuxième est un tableau qui va contenir les données que nous allons va envoyer à la vue.
$this->load->view('utilisateur/profil', $data);
Nous voyons que nous passons un tableau associatif à la vue. Ce faisant, il est maintenant très simple
de récupérer les données dans la vue (fichier profil.php) en faisant :
Et oui ! La clé du tableau devient le nom de la variable. C'est aussi simple que ça.
Ici, la vue sera stocker dans la variable $html et ne sera pas affichée.
Avec tout ceci, nous allons pouvoir créer un système de template. Sur un site Internet, il y a toujours
des parties qui sont identiques pour chaque page (header et footer notamment). Nous pouvons
facilement créer un système permettant de gérer cela.
Tout d'abord, il faut créer une vue template.php à la racine du dossier views et insérez y le code
suivant :
<html>
<head>
<title>Ma page</title>
</head>
<body>
<div>
</div>
</html>
Ce sera toujours cette vue que l'on appellera. Lors de cel appel, il nous suffira de lui passer en
paramètre le contenu d'une autre vue que l'on aura instanciée dans la variable $page. Le contrôleur
ressemblera donc à ceci :
Bien sûr vous pouvez facilement adapter un tel système à vos besoins et y ajouter quelques
fonctionnalités plus robuste.