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.
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 |
|---|---|
|
|
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;
|
|
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: |
|
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: |
|
|
Es handelt sich um ein leistungsstarkes Framework.
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:
Zu den Unternehmen, die das Zend-Framework genutzt haben, gehรถren:
|
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/
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
- 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/
Die obige Abstimmungsseite stammt aus unserer Meinungsformularansicht. Klicken Sie auf OK, ohne eine Option auszuwรคhlen, und Sie sehen die folgende Warnmeldung.
Wรคhlen Sie Ihre Lieblingsbibliothek und klicken Sie anschlieรend auf OK. Die folgende Ergebnisseite wird angezeigt.
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.









