Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Codeigniter

Télécharger au format docx, pdf ou txt
Télécharger au format docx, pdf ou txt
Vous êtes sur la page 1sur 10

Le modèle MVC

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.

Les étapes du MVC avec CodeIgniter

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 modèle retourne les données au contrôleur.

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

Les dossiers et fichiers de base

Allez dans le dossier de CodeIgniter, voici ce qu'il contient :

application : c'est le dossier dans lequel nous allons travailler.

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.

license.txt : le fichier de licence. Vous pouvez le supprimer.

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.

config : ce dossier contient la configuration de notre site

controllers : la liste de nos contrôleurs (c'est la prochaine étape)

helpers : la liste de nos helpers (nous en parlerons plus tard)

models : la liste de nos modèles (nous en parlerons plus tard)


views : la liste de nos vues (nous en parlerons 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.

Fonctionnement des contrôleurs

Dans le dossier controllers vous trouverez un fichier welcome.php, ouvrez le. Plusieurs choses nous
intéresse :

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Welcome extends CI_Controller {

public function index() {

$this->load->view('welcome_message');

La première ligne est un code de sécurité implémenté par CodeIgniter.

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 !

Les urls avec CodeIgniter

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 premier segment est l'url de base de votre site, le domaine.


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 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.

Le dernier segment est un paramètre que recevra la méthode.

Voici donc à quoi pourrait ressembler le contrôleur de cet exemple :

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

// Par convention, le nom de la classe a une majuscule

class Utilisateur extends CI_Controller {

// La méthode profil qui sera appelé a un paramètre "$id". Dans notre exemple, il vaudra 1.

public function profil($id) {

}
}

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.

Contrôleur par défaut

Et si nous ne mettons aucun argument ? Si nous appelons directement http://www.monsite.com/ ?

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.

Supprimer le index.php des urls CodeIgniter

Vous pouvez supprimer le index.php de l'url avec un petit code à mettre dans le .htaccess à la racine
de votre site :

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^(.*)$ index.php/$1 [L,QSA]

Ensuite, ouvrez le fichier application/config/config.php puis passez la variable $config['index_page']


(ligne 17) à vide.

Cette ligne

$config['index_page'] = "index.php";
est à remplacer par celle-ci

$config['index_page'] = "";

Vous pouvez maintenant retirer le index.php de l'url, tout fonctionne normalement.

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 ?

Comprendre la notion de vue

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.

Charger une vue

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');

Cet appel doit toujours se faire dans un contrôleur !


Cette ligne charge et affiche la vue se trouvant dans le fichier
application/views/welcome_message.php.

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');

Envoyer des données à la vue

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.

Prenons comme exemple ce controleur :

class Utilisateur extends CI_Controller {

public function profil() {

$data = array('nom' => 'Robert');

$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 :

echo $nom; // ceci affichera "Robert"

Et oui ! La clé du tableau devient le nom de la variable. C'est aussi simple que ça.

Stocker la vue dans une variable


La fonction view() prend également un troisième paramètre très intéressant. Si vous le mettez à true,
la vue ne s'affichera pas directement, elle sera retournée. Cela signifie que vous pourrez stocker le
contenu de la vue dans une variable.

$html = $this->load->view('utilisateur/profil', $data, true);

Ici, la vue sera stocker dans la variable $html et ne sera pas affichée.

Créer un système de template avec CodeIgniter

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>

<header>Ceci est le header</header>

<div>

<!-- La vue s'affichera ici -->

<?php echo $page; ?>

</div>

<footer>Ceci est le footer</footer>


</body>

</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 :

class Utilisateur extends CI_Controller {

public function profil() {

$data = array('nom' => 'Robert');

// On stocke notre page dans la variable $page

$page = $this->load->view('utilisateur/profil', $data, true);

// On affiche notre page avec le template

$this->load->view('template', array('page' => $page));

Bien sûr vous pouvez facilement adapter un tel système à vos besoins et y ajouter quelques
fonctionnalités plus robuste.

Vous aimerez peut-être aussi