Tutoriel sur le framework PHP MVC
โก Rรฉsumรฉ intelligent
L'architecture du framework PHP MVC sรฉpare les donnรฉes applicatives et la logique mรฉtier de la prรฉsentation, grรขce aux modรจles, aux vues et aux contrรดleurs. CodeIgniter rend ce modรจle pratique, permettant aux dรฉveloppeurs PHP de crรฉer plus rapidement des applications web sรฉcurisรฉes et maintenables.

Quโest-ce que le framework PHP MVC ?
PHP MVC est un modรจle de conception d'application qui sรฉpare les donnรฉes d'application et la logique mรฉtier (modรจle) de la prรฉsentation (vue). MVC signifie Modรจle, Vue et Contrรดleur.
Le contrรดleur sert d'intermรฉdiaire entre les modรจles et les vues.
Considรฉrez le modรจle de conception MVC comme une voiture et son conducteur.
La voiture possรจde des pare-brise (vue) que le conducteur (contrรดleur) utilise pour surveiller la circulation devant lui, puis accรฉlรฉrer ou freiner (modรจle) en fonction de ce qu'il voit devant lui.
Voyons maintenant pourquoi un framework construit sur ce modรจle mรฉrite d'รชtre utilisรฉ.
Pourquoi utiliser le framework PHP MVC ?
Les frameworks PHP MVC simplifient le travail avec des technologies complexes en :
- Masquer tous les dรฉtails complexes de mise en ลuvre
- Fournir des mรฉthodes standard que nous pouvons utiliser pour construire nos applications
- Augmentation de la productivitรฉ des dรฉveloppeurs, car les implรฉmentations de base d'activitรฉs telles que la connexion ร la base de donnรฉes et la validation des entrรฉes utilisateur sont dรฉjร partiellement implรฉmentรฉes.
- Encourager le respect des normes de codage professionnelles
Modรจle de conception PHP MVC
Discutons maintenant briรจvement de chaque composant du modรจle de conception MVC.
Modรจle โ cette partie concerne la logique mรฉtier et les donnรฉes applicatives. Il peut รชtre utilisรฉ pour effectuer des validations de donnรฉes, traiter les donnรฉes et les stocker. Les donnรฉes peuvent provenir :
- fichier plat
- base de donnรฉes
- document XML
- Autres sources de donnรฉes valides.
Contrรดleur โ c'est cette partie qui traite les demandes de ressources adressรฉes au serveur par l'utilisateur.
Par exemple, lorsque l'utilisateur demande URL โฆ/index.php?products=listeLe contrรดleur chargera le modรจle des produits pour rรฉcupรฉrer les donnรฉes des produits, puis affichera les rรฉsultats dans la vue de liste.
En un mot, le contrรดleur relie les modรจles et les vues entre eux en fonction des ressources demandรฉes.
Vues Cette partie dรฉcrit la prรฉsentation des donnรฉes ร l'utilisateur, gรฉnรฉralement sous forme de pages HTML.
Types de framework PHP MVC
Choisir le meilleur framework PHP est un dรฉfi.
Vous n'avez pas besoin d'รฉcrire votre propre framework pour bรฉnรฉficier des avantages de MVC.
Vous devez uniquement essayer de crรฉer votre propre conception d'application liรฉe ร MVC pour comprendre le fonctionnement des frameworks MVC.
Une fois que vous รชtes ร l'aise avec le fonctionnement des frameworks MVC, vous devez passer aux frameworks matures et dรฉjร testรฉs.
Le tableau ci-dessous dรฉcrit briรจvement certains des frameworks PHP populaires et les fonctionnalitรฉs offertes par chacun d'eux.
| FrameworkTA | Description |
|---|---|
|
|
Il s'agit de l'un des frameworks PHP MVC les plus populaires, actuellement dans sa quatriรจme version majeure (CodeIgniter 4). Lรฉger et facile ร prendre en main, il dispose d'un ensemble complet de bibliothรจques permettant de crรฉer rapidement des sites web et des applications. Mรชme les utilisateurs ayant des connaissances limitรฉes en programmation orientรฉe objet peuvent l'utiliser. Les applications crรฉรฉes avec CodeL'allumeur comprend :
|
|
Il s'agit d'un framework HMVC (Hierarchical Model View Controller) sรฉcurisรฉ et lรฉger. ร noter: Kohana a รฉtรฉ officiellement abandonnรฉ en 2017 ; sa derniรจre version stable รฉtait la 3.3.6 (juillet 2016). Le fork communautaire Koseven a continuรฉ ร dรฉvelopper son code source. Parmi les entreprises qui utilisaient Kohana, on peut citer : |
|
Il s'inspire de Ruby on Rails et bรฉnรฉficie d'une maintenance active (version 5.x). Il est reconnu pour des concepts tels que les patrons de conception, le principe de la convention plutรดt que de la configuration, ActiveRecord, etc. CakePHP les applications alimentรฉes incluent ; |
|
|
Il sโagit dโun cadre puissant ;
C'est idรฉal pour le dรฉveloppementping Applications mรฉtier. En 2020, Zend Framework a รฉtรฉ remplacรฉ par le projet open source Laminas. Les applications utilisant Zend/Laminas incluent :
Parmi les entreprises ayant utilisรฉ le framework Zend, on peut citer :
|
Framework PHP MVC vs PHP pur : principales diffรฉrences
Qu'est-ce qu'un framework change concrรจtement ? Le PHP pur offre une libertรฉ totale, mais chaque projet finit par nรฉcessiter de rรฉinventer le routage, la validation et l'accรจs ร la base de donnรฉes. Un framework PHP MVC standardise ces tรขches rรฉpรฉtitives, garantissant ainsi la cohรฉrence du code entre les projets et les รฉquipes.
| Aspect | PHP simple | Framework PHP MVC |
|---|---|---|
| Code organisation | HTML, SQL et logique mรฉlangรฉs dans des fichiers uniques | Sรฉparรฉs en modรจles, vues et contrรดleurs |
| Accรจs ร la base de donnรฉes | Des requรชtes manuscrites sur chaque page | Gรฉnรฉrateur de requรชtes intรฉgrรฉ ou ORM avec liaison de paramรจtres |
| Sรฉcuritรฉ | Le dรฉveloppeur doit se souvenir de toutes les mesures de sรฉcuritรฉ. | Filtrage des entrรฉes, protection XSS et CSRF inclus |
| Entretien | Les modifications se propagent de maniรจre imprรฉvisible ร travers les fichiers | Chaque couche peut changer indรฉpendamment |
๐ก Astuce: Commencez par crรฉer un petit projet PHP simple, comme le sondage ci-dessous ; les difficultรฉs liรฉes au code mixte rendent lโintรฉrรชt de la sรฉparation MVC รฉvident.
Portage de l'application de sondage d'opinion vers Codeallumeur
Dans ce nouvel article concernant notre nouveau projet tutorielNous avons crรฉรฉ une application de sondage en PHP. Ici, nous allons porter ce code vers Codeallumeur
- Tรฉlรฉcharger la derniรจre version de CodeAllumeur de leur en ligne.
- ExtracCopiez le contenu du fichier zip dans votre rรฉpertoire de dรฉveloppement, situรฉ dans le rรฉpertoire de votre serveur web. Dans cette leรงon, nous utiliserons le nom de dossier ciopinionpoll.
- Naviguez vers le URL http://localhost/ciopinionpoll/
Le CodeLa page d'accueil d'Igniter ci-dessus confirme que le framework est correctement installรฉ. Nous allons maintenant porter notre application de sondage d'opinion vers CodeAllumeur. Rappelons que notre application รฉtait divisรฉe en trois composants principaux, ร savoir ;
- Contrรดleur avant โ c'est la partie qui rรฉpond ร URL Effectue la requรชte et renvoie la page demandรฉe. Ce code sera insรฉrรฉ dans le contrรดleur.
- Modรจle โ il s'agit du code qui rรฉpond aux requรชtes de donnรฉes et renvoie les donnรฉes demandรฉes. Ce code sera intรฉgrรฉ au modรจle.
- Vues โ c'est le code responsable du formatage et de l'affichage des donnรฉes. Ce code ira dans la vue
Paramรจtres de configuration de la base de donnรฉes
Pour configurer la connexion ร la base de donnรฉes :
- Accรฉdez au dossier ciopinionpoll
- Ouvrez le base de donnรฉes.php fichier situรฉ dans le rรฉpertoire application/config.
- Localisez les lignes de code suivantes
- Dรฉfinissez le nom d'utilisateur sur root
- Dรฉfinissez le mot de passe sur votre mot de passe root localhost
- Nommez la base de donnรฉes ยซ opinion_poll ยป. Notez que nous utiliserons la base de donnรฉes crรฉรฉe lors de la leรงon prรฉcรฉdente.
- Enregistrez les modifications et fermez le fichier.
Crรฉer notre modรจle
Ensuite, nous allons crรฉer notre modรจle qui รฉtendra le CI_Model. Le CI_Model fait partie de CodeBibliothรจques Igniter. Le modรจle se trouvera dans application/models. opinion_poll_model.php
<?php
class Opinion_poll_model extends CI_Model
{
public function __construct()
{
parent::__construct();
$this->load->database();
}
public function total_votes()
{
$query = $this->db->select('COUNT(choice) as choices_count')->get('js_libraries');
return $query->row()->choices_count;
}
public function get_results()
{
$libraries = array("", "JQuery", "MooTools", "YUI Library", "Glow");
$table_rows = '';
for ($i = 1; $i < 5; $i++)
{
$query = $this->db->select('COUNT(choice) as choices_count')
->where('choice', $i)
->get('js_libraries');
$table_rows .= "<tr><td>" . $libraries[$i] . " Got:</td><td><b>" . $query->row()->choices_count . "</b> votes</td></tr>";
}
return $table_rows;
}
public function add_vote($choice)
{
$ts = date("Y-m-d H:i:s");
$data = array('choice' => $choice, 'ts' => $ts);
$this->db->insert('js_libraries', $data);
}
}
?>
ICI,
- "class Opinion_poll_model extends CI_Model..." est notre modรจle qui รฉtend le CI_Model
- ยซ parent::__construct(); ยป appelle le constructeur CI_Model
- "$this->load->database();" charge la bibliothรจque de base de donnรฉes afin que notre application puisse interagir avec la base de donnรฉes
- ยซ $this->db-> ยป est CodeEnregistrement actif d'Igniter. Vรฉrifiez ceci lien pour plus dโinformations sur le dossier actif.
Crรฉation de notre contrรดleur
Crรฉons maintenant le contrรดleur. Nous utiliserons la configuration par dรฉfaut. CodeLe contrรดleur Igniter se trouve dans application/controllers/welcome.php. Remplacez son code source par le code suivant.
<?php
if (!defined('BASEPATH')) exit('No direct script access allowed');
class Welcome extends CI_Controller {
public function __construct() {
parent::__construct();
$this->load->model('opinion_poll_model');
}
public function index() {
if ($this->input->post('submitbutton') && !$this->input->post('vote')) {
echo "<script>alert('You did not vote!');</script>";
}
if ($this->input->post('vote')) {
$this->opinion_poll_model->add_vote($this->input->post('vote'));
$data['total_votes'] = $this->opinion_poll_model->total_votes();
$data['rows'] = $this->opinion_poll_model->get_results();
$this->load->view('results', $data);
} else {
$this->load->view('opinion_poll_form');
}
}
}
/* End of file welcome.php */
/* Location: ./application/controllers/welcome.php */
?>
ICI,
- "if (!dรฉfini('BASEPATH')) exit('Aucun accรจs direct au script autorisรฉ');" garantit que les utilisateurs n'accรจdent pas directement ร la classe du contrรดleur
- "la classe Welcome รฉtend CI_Controllerโฆ" notre contrรดleur รฉtend la classe CI_Controller
- La fonction publique __construct() appelle le constructeur de la classe CI_Controller et charge notre modรจle Opinion_poll_model.
- La fonction ยซ public function index()โฆ ยป correspond ร la fonction qui fait rรฉfรฉrence ร index.php. Elle utilise CodeLa classe d'entrรฉe d'Igniter vรฉrifie si un vote a รฉtรฉ soumis, l'ajoute ร la base de donnรฉes, puis affiche les rรฉsultats. Si le tableau `post` de la classe d'entrรฉe est vide, la page de vote est chargรฉe.
- ยซ $this->input->post('โฆ') ยป est le CodeClasse d'entrรฉe Igniter qui rรฉcupรจre le contenu de la variable globale $_POST.
- ยซ $this->opinion_poll_model->add_vote($this->input->post('vote')) ยป appelle la mรฉthode add_vote du modรจle pour ajouter le vote dans la base de donnรฉes.
Crรฉer nos vues
Rappelez-vous de l'exemple prรฉcรฉdent : nous avions deux pages HTML, l'une pour le vote et l'autre pour les rรฉsultats. Nous allons utiliser le mรชme code HTML, avec quelques modifications mineures, pour crรฉer nos vues. Crรฉez les fichiers suivants dans le rรฉpertoire application/views.
opinion_poll_form.php
<html>
<head>
<title>
JavaScript Libraries - Opinion Poll
</title>
</head>
<body>
<h2>JavaScript Libraries - Opinion Poll</h2>
<p><b>What is your favorite JavaScript Library?</b></p>
<form method="POST" action="index.php">
<p>
<input type="radio" name="vote" value="1" /> JQuery
<br />
<input type="radio" name="vote" value="2" /> MooTools
<br />
<input type="radio" name="vote" value="3" /> YUI Library
<br />
<input type="radio" name="vote" value="4" /> Glow </p>
<p>
<input type="submit" name="submitbutton" value="OK" />
</p>
</form>
</body>
</html>
Crรฉons maintenant la page de rรฉsultats results.php
<html>
<head>
<title>JavaScript Libraries - Opinion Poll Results</title>
</head>
<body>
<h2>JavaScript Libraries - Opinion Poll Results</h2>
<p><b>What is your favorite JavaScript Library?</b></p>
<p><b><?php echo $total_votes; ?></b> people have thus far taken part in this poll:</p>
<p><table><tr><td>
<?php print($rows); ?>
</tr></td></table></p>
<p><a href="#">Return to voting page</a></p>
</body>
</html>
Tester notre application
En supposant que le rรฉpertoire racine de votre application soit ciopinionpoll, accรฉdez ร http://localhost/ciopinionpoll/
La page de vote ci-dessus provient de notre vue opinion_poll_form. Cliquez sur OK sans sรฉlectionner d'option et vous verrez le message d'alerte suivant.
Votez pour votre bibliothรจque prรฉfรฉrรฉe, puis cliquez sur OK. La page de rรฉsultats suivante s'affichera.
Cela confirme que les trois couches fonctionnent ensemble : le contrรดleur a reรงu le vote, le modรจle lโa stockรฉ et comptabilisรฉ, et la vue a affichรฉ les totaux.








