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.

  • ๐Ÿงฉ Motif: L'architecture MVC divise une application en Modรจle (donnรฉes), Vue (prรฉsentation) et Contrรดleur (gestion des requรชtes) pour un code plus propre.
  • ๐Ÿš€ Productivitรฉ: Les frameworks fournissent des bibliothรจques prรฉ-intรฉgrรฉes pour l'accรจs aux bases de donnรฉes, la validation et le nettoyage des entrรฉes, permettant ainsi aux รฉquipes de livrer des fonctionnalitรฉs plus rapidement.
  • ๏ธ Options : CodeIgniter, CakePHP et Laminas (anciennement Zend) restent des options actives, tandis que Kohana a รฉtรฉ abandonnรฉ en 2017.
  • ๐Ÿ‡ง๐Ÿ‡ท Modรจle: In CodeIgniter, les modรจles รฉtendent CI_Model et utilisent les mรฉthodes Query Builder pour des opรฉrations de base de donnรฉes sรฉcurisรฉes.
  • (I.e. Contrรดleur: Les contrรดleurs รฉtendent CI_Controller, lisent les entrรฉes utilisateur via la classe d'entrรฉe et chargent la vue appropriรฉe.
  • ๐Ÿ“ˆ Impact: La migration d'une simple application de sondage PHP montre comment la structure MVC rรฉduit la duplication et simplifie la maintenance ร  long terme.

Framework PHP MVC

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

Codeallumeur


Codeallumeur


https://codeigniter.com/

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 :


kohana


kohana


http://kohanaframework.org

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 :


CakePHP


CakePHP


www.cakephp.org

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 ;


Zend

https://getlaminas.org/


Zend (maintenant Laminas)

Il sโ€™agit dโ€™un cadre puissant ;

  • Sรฉcurisรฉ, fiable, rapide et รฉvolutif
  • Permet la crรฉation de services web et d'API.

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 :

  • PimcoreCMS,
  • DotKernel.

Parmi les entreprises ayant utilisรฉ le framework Zend, on peut citer :

  • BBC
  • Cisco
  • Webex
  • Offers.com

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/

CodeLa page d'accueil d'Igniter s'affiche aprรจs extracting le cadre

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

paramรจtres de configuration de la base de donnรฉes dans CodeFichier database.php d'Igniter

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

Formulaire de vote pour sondage d'opinion rendu par le Codeapplication Igniter

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.

Message d'alerte de validation affichรฉ lorsqu'aucun vote n'est sรฉlectionnรฉ

Votez pour votre bibliothรจque prรฉfรฉrรฉe, puis cliquez sur OK. La page de rรฉsultats suivante s'affichera.

Page de rรฉsultats du sondage d'opinion affichant le nombre de votes par JavaBibliothรจque de scripts

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.

FAQ

HMVC (Hierarchical Model View Controller) organise une application en triades MVC indรฉpendantes pouvant s'appeler mutuellement. Des frameworks tels que kohana HMVC a popularisรฉ cette architecture car elle permet de modulariser les grandes applications.

Oui. Laravel est actuellement le framework PHP MVC le plus populaire. Il suit la mรชme sรฉparation Modรจle-Vue-Contrรดleur dรฉcrite ici, et y ajoute des outils comme l'ORM Eloquent et les templates Blade.

Oui. Des outils comme Copilote GitHub Il est possible de gรฉnรฉrer des modรจles, des contrรดleurs et des vues ร  partir d'invites. Il est nรฉanmoins recommandรฉ de vรฉrifier le code gรฉnรฉrรฉ afin de dรฉtecter d'รฉventuelles failles de sรฉcuritรฉ, telles que des caractรจres non รฉchappรฉs et des injections SQL.

Non. Les assistants IA accรฉlรจrent l'รฉcriture de code, mais les frameworks fournissent toujours la structure รฉprouvรฉe, les paramรจtres de sรฉcuritรฉ par dรฉfaut et les conventions qui garantissent la maintenabilitรฉ des applications. Les deux fonctionnent mieux ensemble.

Non. Codeallumeur Ce framework est accessible aux dรฉveloppeurs ayant une expรฉrience limitรฉe en programmation orientรฉe objet. La connaissance des classes, des mรฉthodes et des principes de base de l'hรฉritage suffit pour suivre ses modรจles et ses schรฉmas de contrรดleurs.

Rรฉsumez cet article avec :