Tutoriel PHP MVC Framework : exemple CodeIgniter
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 est รฉquipรฉe de pare-brise (vue) que le conducteur (contrรดleur) utilise pour surveiller le trafic devant lui, puis la vitesse ou le freinage (modรจle) en fonction de ce qu'il voit devant lui.
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 crรฉer nos applications.
- Augmentation de la productivitรฉ des dรฉveloppeurs, car la mise en ลuvre de base des activitรฉs telles que la connexion ร la base de donnรฉes, la dรฉsinfection des entrรฉes utilisateur, etc. est dรฉjร partiellement mise en ลuvre.
- Adhรฉsion aux 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 la partie qui traite des demandes de ressources des utilisateurs auprรจs du serveur.
ร titre d'exemple, lorsque les utilisateurs demandent l'URL โฆ/index.php?products=liste, le contrรดleur chargera le modรจle de produits pour rรฉcupรฉrer les donnรฉes des produits, puis affichera les rรฉsultats dans la vue 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 traite de la prรฉsentation des donnรฉes ร l'utilisateur. C'est 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 chaque framework.
| FrameworkTA | Description |
|---|---|
|
|
C'est l'un des frameworks PHP MVC les plus populaires. Il est lรฉger et sa courbe d'apprentissage est courte. Il dispose d'un riche ensemble de bibliothรจques qui permettent de crรฉer rapidement des sites Web et des applications. Les utilisateurs ayant une connaissance limitรฉe de la programmation POO peuvent รฉgalement l'utiliser. Les applications alimentรฉes par CodeIgniter incluent : |
|
Il s'agit d'un cadre sรฉcurisรฉ et lรฉger de contrรดleur de vue de modรจle hiรฉrarchique HMVC. Il dispose d'un riche ensemble de composants permettant de dรฉvelopper rapidement des applications. Les entreprises qui utilisent Kohana comprennent : |
|
Il est calquรฉ sur Ruby on rails. Il est connu pour des concepts tels que les modรจles de conception de logiciels, les conventions de configuration, ActiveRecord, etc. CakePHP les applications alimentรฉes incluent ; |
|
|
Il sโagit dโun cadre puissant ;
Il propose des API de fournisseurs tels que Amazon, Google, Flickr, Yahoo etc. Il est idรฉal pour dรฉvelopper des applications professionnelles. Les applications propulsรฉes par Zend incluent :
Les entreprises utilisant le framework Zend incluent :
|
Portage de l'application de sondage d'opinion sur CodeIgniter
Dans ce nouvel article concernant notre nouveau projet tutoriel, nous avons crรฉรฉ une application de sondage PHP. Ici, nous porterons ce code sur CodeIgniter
- Tรฉlรฉcharger la derniรจre version de CodeIgniter de leur en ligne.
- Extrayez le contenu du fichier compressรฉ dans votre rรฉpertoire de dรฉveloppement dans le rรฉpertoire de votre serveur Web. Nous utiliserons ciopinionpoll comme nom de dossier dans cette leรงon.
- Accรฉdez ร l'URL http://localhost/ciopinionpoll/
Nous allons maintenant porter notre application de sondage d'opinion sur CodeIgniter. Rappelons que notre application รฉtait divisรฉe en trois volets majeurs ร savoir le ;
- Contrรดleur frontal โ c'est la partie qui rรฉpond aux requรชtes URL et renvoie la page demandรฉe. Ce code ira dans le contrรดleur
- Modรจle โ c'est le code qui rรฉpond aux donnรฉes demandรฉes et renvoie les donnรฉes demandรฉes. Ce code ira dans le modรจle
-
Vues โ c'est le code responsable du formatage et de l'affichage des donnรฉes. Ce code ira dans la vue
- 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
Paramรจtres de configuration de la base de donnรฉes
- Dรฉfinissez le nom d'utilisateur sur root
- Dรฉfinissez le mot de passe sur votre mot de passe root localhost
- Nom de la base de donnรฉes ร opinion_poll. Notez que nous utiliserons la base de donnรฉes crรฉรฉe dans 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 des bibliothรจques CodeIgniter. Le modรจle sera situรฉ dans application/models opinion_poll_model.php
<?php
class Opinion_poll_model extends CI_Model
{
public function __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++)
{
$sql_stmt = "SELECT COUNT(choice) choices_count FROM js_libraries WHERE choice = $i;";
$result = $model->
select($sql_stmt); $table_rows .= "<tr><td>" . $ libraries [$i] . " Got:</td><td><b>" . $result[0] . "</b> votes</td></tr>";
}
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 l'enregistrement actif de CodeIgniter. Vรฉrifie รงa lien pour plus dโinformations sur le dossier actif.
Crรฉer notre contrรดleur Crรฉons maintenant le contrรดleur. Nous utiliserons le contrรดleur CodeIgniter par dรฉfaut situรฉ dans application/controllers/welcome.php. Remplacez ses codes sources 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
- ยซ fonction publique __construct() ยป appelle la mรฉthode constructeur de classe de CI_Controller et charge notre modรจle Opinion_poll_model
- ยซ public function index()โฆ ยป est la fonction qui correspond ร index.php. il utilise la classe d'entrรฉe de CodeIgniter pour vรฉrifier si un vote a รฉtรฉ soumis, l'ajouter ร la base de donnรฉes puis afficher les rรฉsultats. Si le tableau post de la classe d'entrรฉe est vide, il charge la page de vote.
- ยซ $this->input->post('โฆ') ยป est la classe d'entrรฉe CodeIgniter 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
Rappelons de l'exemple prรฉcรฉdent que nous avions deux pages HTML, une pour le vote et l'autre pour les rรฉsultats. Nous utiliserons le mรชme code HTML avec des modifications minimes 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 ciopinion, accรฉdez ร http://localhost/ciopionpoll/
Cliquez sur le bouton OK, vous verrez le message d'alerte suivant
Votez pour votre candidat prรฉfรฉrรฉ puis cliquez sur OK Vous verrez la page de rรฉsultats suivante
Conclusion
CodeIgniter est un framework PHP MVC facile ร apprendre et ร utiliser qui peut rรฉduire considรฉrablement le temps passรฉ ร dรฉvelopper des applications.
CodeIgniter est un framework PHP MVC facile ร apprendre et ร utiliser qui peut rรฉduire considรฉrablement le temps passรฉ ร dรฉvelopper des applications.
Rรฉsumรฉ
- Un framework est un ensemble de bibliothรจques qui assurent une implรฉmentation partielle de tรขches courantes.
- PHP dispose d'un certain nombre de frameworks MVC open source matures et testรฉs.
- Une bonne approche de dรฉveloppement sรฉpare les donnรฉes de la prรฉsentation et encourage l'utilisation d'un point d'entrรฉe unique dans une application.
- Les applications PHP traditionnelles qui suivent les meilleures pratiques de conception d'applications peuvent รชtre portรฉes vers des frameworks MVC avec des modifications minimes.








