PHP MVC Framework-Tutorial

โšก Intelligente Zusammenfassung

Das PHP-MVC-Framework-Design trennt Anwendungsdaten und Geschรคftslogik von der Prรคsentation mithilfe von Modellen, Ansichten und Controllern. CodeIgniter macht dieses Muster in die Praxis um und ermรถglicht es PHP-Entwicklern, schneller sichere und wartungsfreundliche Webanwendungen zu erstellen.

  • ๐Ÿงฉ Muster: Das MVC-Modell unterteilt eine Anwendung in Model (Daten), View (Prรคsentation) und Controller (Anfragebearbeitung), um einen รผbersichtlicheren Code zu gewรคhrleisten.
  • ๐Ÿš€ Produktivitรคt: Frameworks liefern vorgefertigte Bibliotheken fรผr Datenbankzugriff, Validierung und Eingabebereinigung mit, sodass Teams Funktionen schneller bereitstellen kรถnnen.
  • ๏ธ Option: CodeIgniter, CakePHP und Laminas (ehemals Zend) sind weiterhin aktive Optionen, wรคhrend Kohana im Jahr 2017 eingestellt wurde.
  • ๐Ÿ—„๏ธ Modell: In CodeIgniter-Modelle erweitern CI_Model und verwenden Query Builder-Methoden fรผr sichere Datenbankoperationen.
  • ๐ŸŽฎ Regler: Controller erweitern CI_Controller, lesen Benutzereingaben รผber die Eingabeklasse ein und laden die richtige Ansicht.
  • ๐Ÿ“ˆ Auswirkungen: Die Portierung einer einfachen PHP-Umfrageanwendung zeigt, wie die MVC-Struktur Redundanz reduziert und die langfristige Wartung vereinfacht.

PHP MVC Framework

Was ist das PHP-MVC-Framework?

PHP MVC ist ein Anwendungsentwurfsmuster, das die Anwendungsdaten und die Geschรคftslogik (Modell) von der Prรคsentation (Ansicht) trennt. MVC steht fรผr Model, View & Controller.

Der Controller vermittelt zwischen den Modellen und Ansichten.

Stellen Sie sich das MVC-Entwurfsmuster als ein Auto und einen Fahrer vor.

Das Auto verfรผgt รผber Windschutzscheiben (Sicht), die der Fahrer (Controller) nutzt, um den vorausfahrenden Verkehr zu รผberwachen und dann je nach Sichtverhรคltnissen zu beschleunigen oder zu bremsen (Modell).

Als Nรคchstes wollen wir uns ansehen, warum es sich lohnt, ein auf diesem Muster basierendes Framework zu verwenden.

Warum PHP MVC Framework verwenden?

PHP-MVC-Frameworks vereinfachen die Arbeit mit komplexen Technologien durch:

  • Alle komplexen Implementierungsdetails verbergen
  • Bereitstellung von Standardmethoden, die wir zum Erstellen unserer Anwendungen verwenden kรถnnen.
  • Steigerung der Entwicklerproduktivitรคt, da Basisimplementierungen von Aktivitรคten wie der Datenbankverbindung und der Bereinigung von Benutzereingaben bereits teilweise implementiert sind.
  • Fรถrderung der Einhaltung professioneller Codierungsstandards

PHP MVC-Entwurfsmuster

Lassen Sie uns nun kurz jede Komponente des MVC-Entwurfsmusters besprechen.

Modell โ€“ Dieser Teil befasst sich mit der Geschรคftslogik und den Anwendungsdaten. Es kann verwendet werden, um Datenvalidierungen durchzufรผhren, Daten zu verarbeiten und zu speichern. Die Daten kรถnnen stammen von;

  • flache Datei
  • Datenbank
  • XML-Dokument
  • Andere gรผltige Datenquellen.

Controller โ€“ Dies ist der Teil, der sich mit den Anfragen des Benutzers nach Ressourcen vom Server befasst.

Wenn der Benutzer beispielsweise Folgendes anfordert: URL โ€ฆ/index.php?products=listDer Controller lรคdt das Produktmodell, um die Produktdaten abzurufen, und gibt die Ergebnisse anschlieรŸend in der Listenansicht aus.

Kurz gesagt: Der Controller verknรผpft die Modelle und Ansichten abhรคngig von den angeforderten Ressourcen miteinander.

Aufrufe โ€“ Dieser Teil befasst sich mit der Prรคsentation der Daten fรผr den Benutzer. Dies geschieht รผblicherweise in Form von HTML-Seiten.

Arten von PHP-MVC-Frameworks

Die Auswahl des besten PHP-Frameworks ist eine Herausforderung.

Sie mรผssen kein eigenes Framework schreiben, um von den Vorteilen von MVC zu profitieren.

Sie sollten nur versuchen, ein eigenes MVC-bezogenes Anwendungsdesign zu erstellen, um zu verstehen, wie MVC-Frameworks funktionieren.

Sobald Sie mit der Funktionsweise von MVC-Frameworks vertraut sind, sollten Sie zu den ausgereiften und bereits getesteten Frameworks รผbergehen.

Die folgende Tabelle beschreibt kurz einige der gรคngigen PHP-Frameworks und die Funktionen, die jedes Framework bietet.

Unser Ansatz Beschreibung

CodeZรผnder


CodeZรผnder


https://codeigniter.com/

Es handelt sich um eines der beliebtesten PHP-MVC-Frameworks, das mittlerweile in seiner vierten Hauptversion vorliegt (CodeIgniter 4). Es ist ressourcenschonend und leicht zu erlernen. Es verfรผgt รผber umfangreiche Bibliotheken, die die schnelle Entwicklung von Websites und Anwendungen unterstรผtzen. Auch Anwender mit geringen Kenntnissen in objektorientierter Programmierung kรถnnen es verwenden. Mit Igniter 4 erstellte Anwendungen CodeZรผnder umfassen;


Kohana


Kohana


http://kohanaframework.org

Es handelt sich um ein sicheres und leichtgewichtiges Framework auf Basis des hierarchischen Model-View-Controller (HMVC). Hinweis: Kohana wurde 2017 offiziell eingestellt; die letzte stabile Version war 3.3.6 (Juli 2016). Der Community-Fork Koseven fรผhrte die Codebasis weiter. Zu den Unternehmen, die Kohana nutzten, gehรถrten:


KuchenPHP


KuchenPHP


www.cakephp.org

Es basiert auf Ruby on Rails und wird weiterhin aktiv gepflegt (Version 5.x). Es ist bekannt fรผr Konzepte wie Software-Designmuster, Konvention vor Konfiguration, ActiveRecord usw. KuchenPHP Zu den angetriebenen Anwendungen gehรถren:


Zend

https://getlaminas.org/


Zend (jetzt Laminas)

Es handelt sich um ein leistungsstarkes Framework.

  • Sicher, zuverlรคssig, schnell und skalierbar
  • Unterstรผtzt die Erstellung von Webdiensten und APIs.

Es ist ideal fรผr die Entwicklungping Geschรคftsanwendungen. Im Jahr 2020 wurde das Zend Framework in das Open-Source-Projekt Laminas รผberfรผhrt. Zu den auf Zend/Laminas basierenden Anwendungen gehรถren:

  • Pimcore CMS,
  • DotKernel.

Zu den Unternehmen, die das Zend-Framework genutzt haben, gehรถren:

  • BBC
  • Cisco
  • Webex
  • Offers.com

PHP MVC Framework vs. reines PHP: Die wichtigsten Unterschiede

Was รคndert ein Framework in der Praxis tatsรคchlich? Reines PHP bietet zwar vรถllige Freiheit, doch letztendlich mรผssen Routing, Validierung und Datenbankzugriff in jedem Projekt von Grund auf neu entwickelt werden. Ein PHP-MVC-Framework standardisiert diese wiederkehrenden Aufgaben, sodass Ihr Code projekt- und teamรผbergreifend konsistent bleibt.

Aspekt Einfaches PHP PHP MVC Framework
Code Organisation Gemischtes HTML, SQL und Logik in einzelnen Dateien Unterteilt in Modelle, Ansichten und Controller
Datenbankzugriff Handschriftliche Anfragen auf jeder Seite Integrierter Abfragegenerator oder ORM mit Parameterbindung
Sicherheit Der Entwickler muss alle Sicherheitsvorkehrungen beachten. Eingangsfilterung, XSS- und CSRF-Schutz sind enthalten
Wartung ร„nderungen breiten sich unvorhersehbar in den Dateien aus. Jede Schicht kann sich unabhรคngig verรคndern

๐Ÿ’ก TIPP: Erstellen Sie zunรคchst ein kleines, einfaches PHP-Projekt, wie beispielsweise die untenstehende Meinungsumfrage; die Problematik des uneinheitlichen Codes macht den Wert der MVC-Trennung deutlich.

Portierung der Meinungsumfrage-Anwendung nach CodeZรผnder

In dieser LernprogrammWir haben eine PHP-Umfrageanwendung erstellt. Hier werden wir diesen Code portieren nach CodeZรผnder

  • Herunterladen die neueste Version von CodeZรผnder von ihrem Webseite.
  • ExtracKopieren Sie den Inhalt der ZIP-Datei in Ihr Entwicklungsverzeichnis auf Ihrem Webserver. In dieser Lektion verwenden wir den Ordnernamen โ€žciopinionpollโ€œ.
  • Navigieren Sie zu URL http://localhost/ciopinionpoll/

CodeDie Willkommensseite von Igniter wird nach dem Ex angezeigt.tracdas Gerรผst

Das CodeDie obenstehende Willkommensseite von Igniter bestรคtigt die korrekte Installation des Frameworks. Wir werden nun unsere Umfrageanwendung portieren. CodeZรผnder. Erinnern Sie sich, dass unsere Anwendung in drei Hauptkomponenten unterteilt war, nรคmlich:

  • Frontcontroller โ€“ das ist der Teil, der reagiert auf URL Die angeforderte Seite wird angefordert und zurรผckgegeben. Dieser Code wird in den Controller eingefรผgt.
  • Modell โ€“ Dies ist der Code, der auf Datenanfragen reagiert und die angeforderten Daten zurรผckgibt. Dieser Code wird in das Modell eingefรผgt.
  • Ansichten โ€“ Dies ist der Code, der fรผr die Formatierung und Anzeige der Daten verantwortlich ist. Dieser Code wird in die Ansicht รผbernommen

Datenbankkonfigurationseinstellungen

So konfigurieren Sie die Datenbankverbindung:

  • Navigieren Sie zum Ordner โ€žciopinionpollโ€œ.
  • ร–ffnen Sie den Microsoft Store auf Ihrem Windows-PC database.php Die Datei befindet sich im Verzeichnis application/config.
  • Suchen Sie die folgenden Codezeilen

Datenbankkonfigurationseinstellungen in CodeIgniter database.php Datei

  • Legen Sie den Benutzernamen auf โ€žrootโ€œ fest
  • Setzen Sie das Passwort auf Ihr lokales Root-Passwort.
  • Benennen Sie die Datenbank โ€žopinion_pollโ€œ. Beachten Sie, dass wir die in der vorherigen Lektion erstellte Datenbank verwenden werden.
  • Speichern Sie die ร„nderungen und schlieรŸen Sie die Datei.

Erstellen unseres Modells

Als Nรคchstes erstellen wir unser Modell, das das CI_Model erweitern wird. Das CI_Model ist Teil von CodeIgniter-Bibliotheken. Das Modell befindet sich im Verzeichnis application/models. meinung_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);
    }
}
?>

HIER,

  • โ€žclass Opinion_poll_model erweitert CI_Modelโ€ฆโ€œ ist unser Modell, das das CI_Model erweitert
  • โ€žparent::__construct();โ€œ ruft den CI_Model-Konstruktor auf
  • โ€ž$this->load->database();โ€œ lรคdt die Datenbankbibliothek, damit unsere Anwendung mit der Datenbank interagieren kann
  • โ€œ$this->db->โ€ ist CodeAktiver Datensatz von Igniter. รœberprรผfen Sie dies. Link Weitere Informationen zum aktiven Datensatz finden Sie hier.

Erstellung unseres Controllers

Erstellen wir nun den Controller. Wir verwenden den Standard-Controller. CodeDer Igniter-Controller befindet sich in application/controllers/welcome.php. Ersetzen Sie seinen Quellcode durch den folgenden Code.

<?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 */
?>

HIER,

  • โ€žif (!defined('BASEPATH')) exit('Kein direkter Skriptzugriff erlaubt');โ€œ stellt sicher, dass Benutzer nicht direkt auf die Controller-Klasse zugreifen
  • โ€žKlasse Willkommen erweitert CI_Controllerโ€ฆโ€œ Unser Controller erweitert die Klasse CI_Controller
  • Die Funktion โ€žpublic function __construct()โ€œ ruft die Konstruktormethode der Klasse CI_Controller auf und lรคdt unser Modell Opinion_poll_model.
  • โ€žpublic function index()โ€ฆโ€œ ist die Funktion, die auf index.php verweist. Sie verwendet CodeDie Eingabeklasse von Igniter prรผft, ob eine Stimme abgegeben wurde, fรผgt diese der Datenbank hinzu und zeigt anschlieรŸend die Ergebnisse an. Ist das Post-Array der Eingabeklasse leer, wird die Abstimmungsseite geladen.
  • โ€œ$this->input->post('โ€ฆ')โ€ ist die CodeIgniter-Eingabeklasse, die den Inhalt der globalen Variable $_POST erfasst.
  • โ€ž$this->opinion_poll_model->add_vote($this->input->post('vote'))โ€œ ruft die add_vote-Methode des Modells auf, um die Stimme zur Datenbank hinzuzufรผgen.

Unsere Ansichten schaffen

Erinnern Sie sich an das vorherige Beispiel? Wir hatten zwei HTML-Seiten, eine fรผr die Abstimmung und eine fรผr die Ergebnisse. Wir verwenden denselben HTML-Code mit minimalen Anpassungen, um unsere Ansichten zu erstellen. Erstellen Sie die folgenden Dateien im Verzeichnis โ€ž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>

Lassen Sie uns nun die Ergebnisseite results.php erstellen

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

Testen unserer Anwendung

Angenommen, das Stammverzeichnis Ihrer Anwendung ist ciopinionpoll, navigieren Sie zu http://localhost/ciopinionpoll/

Abstimmungsformular fรผr Meinungsumfragen, erstellt von der CodeZรผnderanwendung

Die obige Abstimmungsseite stammt aus unserer Meinungsformularansicht. Klicken Sie auf OK, ohne eine Option auszuwรคhlen, und Sie sehen die folgende Warnmeldung.

Eine Validierungswarnung wird angezeigt, wenn keine Stimme ausgewรคhlt wurde.

Wรคhlen Sie Ihre Lieblingsbibliothek und klicken Sie anschlieรŸend auf OK. Die folgende Ergebnisseite wird angezeigt.

Seite mit den Ergebnissen der Meinungsumfrage, die die Stimmenanzahl pro Person anzeigt JavaSkriptbibliothek

Dies bestรคtigt, dass die drei Ebenen zusammenarbeiten: Der Controller hat die Stimme empfangen, das Modell hat sie gespeichert und gezรคhlt, und die Ansicht hat die Summen angezeigt.

Hรคufig gestellte Fragen

HMVC (Hierarchical Model View Controller) organisiert eine Anwendung in unabhรคngige MVC-Triaden, die sich gegenseitig aufrufen kรถnnen. Frameworks wie beispielsweise Kohana HMVC wurde populรคr, weil es die Modularisierung groรŸer Anwendungen erleichtert.

Ja. Laravel ist derzeit das beliebteste PHP-MVC-Framework. Es folgt der gleichen hier beschriebenen Model-View-Controller-Trennung und bietet zusรคtzlich Tools wie das Eloquent ORM und Blade-Templates.

Ja. Tools wie GitHub-Copilot Es kรถnnen Modelle, Controller und Ansichten anhand von Eingabeaufforderungen generiert werden. Sie sollten den generierten Code dennoch auf Sicherheitslรผcken wie nicht maskierte Ausgaben und SQL-Injection รผberprรผfen.

Nein. KI-Assistenten beschleunigen zwar die Codeentwicklung, aber Frameworks bieten weiterhin die bewรคhrte Struktur, die standardmรครŸigen Sicherheitsstandards und die Konventionen, die die Wartbarkeit von Anwendungen gewรคhrleisten. Die beiden ergรคnzen sich am besten.

Nein. CodeZรผnder Es ist auch fรผr Entwickler mit geringen Vorkenntnissen in der objektorientierten Programmierung geeignet. Kenntnisse รผber Klassen, Methoden und grundlegende Vererbung genรผgen, um den Modell- und Controller-Mustern zu folgen.

Fassen Sie diesen Beitrag mit folgenden Worten zusammen: