WinFuture-Forum.de: Tutorial - MVC - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

Tutorial - MVC Model View Controller


#1 Mitglied ist offline   FenKeN 

  • Gruppe: aktive Mitglieder
  • Beiträge: 220
  • Beigetreten: 22. September 11
  • Reputation: 8
  • Geschlecht:Männlich
  • Wohnort:Erding
  • Interessen:Php, C#, Programmierung

geschrieben 27. Juni 2012 - 11:51

Servus WFler,

ich hab mir mal die Zeit genommen, um den Interessierten Usern und Gästen das MVC Prinzip etwas näher zu bringen.
In der Hoffnung, dass es doch jemanden hilft und dass sich hier mehr Entwickler ins Forum schleichen.

Gliederung:
---1. MVC - Was ist das?
-----1.1 Definition Model
-----1.2 Definition View
-----1.3 Definition Controller
---2. Verzeichnisstruktur
---3. Beispiel Gästebuch
-----3.1 Modelklasse
-----3.2 Controllerklasse
-----3.3 Views
-----3.4 Templatedateien
-----3.5 Index (bootstrapdatei)


1. MVC - Was ist das?
MVC steht für Model View Controller grob könnte man das Prinzip auch Daten Anzeige Kontroller nennen.
die Model- und die Controllerklasse arbeiten mit Methoden die bestimmte Aktionen durchführen.
Views sind nichts anderes als Templatedateien die wir unter *.phtml abspeichern.

Kleiner Hinweis:
View und Model kennen sich nicht.
Controller holt sich die Daten vom Model und verarbeitet sie ggf. weiter.
Sendet die Daten anschließend an ein View und schüttet dieses aus!

1.1 Definition Model
Das Model arbeitet mit Daten aus der Datenbank, Textdateien oder wo man sonst noch Daten herbekommt.

1.2 Definition View
Das sind unsere Template Dateien, die der Controller mit Werten füllt und ausschüttet.
Welches Template wann, wie und wo genutzt wird, entscheidet ebenfalls der Controller.

1.3 Definition Controller
Der Controller ist sozusagen die Schnittstelle zwischen Model und View.
In der Bootstrap-Datei (Index.php) legen wir fest, welchen Controller wir benutzen wollen.
Der Controller holt sich dann die Daten vom Model und baut daraus eine Templatedatei und schüttet diese im Browser aus.

2. Verzeichnisstruktur
\root
----library\
--------view.php
----models\
--------gbook.php
----views\
--------gbook.phtml
----controller\
--------gbook.php
----index.php


3. Beispiel Gästebuch
Ich habe mir gedacht, dass ich euch die Thematik mittels eines kleinem Beispiels am Besten näher bringe.
Nach etwas längeren Überlegungen hab ich mich dann für ein simples Gästebuch entschieden!

3.1 Modelklasse
Wie oben schon besprochen, ist die Modelklasse zuständig dafür uns die Daten zu liefern.
Also braucht die Klasse welche Methoden?
Richtig!
Eine getPosts() und eine save(), zum speichern und holen der Einträge.

<?php
	class gbookModel
	{
		private $Db = null;
		public function getPosts()
		{
			$sql = "SELECT name, text FROM gbook";
			$qry = $this->Db->prepare($sql);
			$qry->execute();

			$posts = array();
			while($entries = $qry->fetch())
			{
				array_push($array,$entries);
			}

			return $posts;
		}

		public function save()
		{
			//Ähnlich wie oben, sollte aber locker für euch machbar sein :)
		}

		public function __construct()
		{
			if($this->Db == null)
				$this->Db = new PDO("mysql:host=localhost, dbname=gbook;", "user","pass");
		}
	}
?>



Im Constructor baue ich die Datenbankverbindung auf, ich verwende hier PDO.
Der Controller kommt nun mittels getPosts(); an alle Einträge des Gästesbuches ran.
Man kann dafür auch noch getPostByID($id) schreiben um einzelne Einträge zu bekommen und eine spezielle Ansicht zu basteln (für ein Forum zb).
Somit wären wir mit dem Model fertig.

3.2 Controllerklasse
Jetzt kommt der wichtigste Teil um das MVC Prinzip umzusetzen.
Wir brauchen einen Controller, der verschiedene Actionmethoden beinhaltet und mit den Daten des Models arbeitet

<?php
	class gbookController
	{
		private $gbookModel = null;
		private $gbookView = null;

		public function __construct()
		{
			require('models/gbook.php');
			require('library/view.php');

			$this->gbookModel = new gbookModel();
			$this->gbookView = new gbookView();
		}

		public function indexAction()
		{
			$posts = $this->gbookModel->getPosts();
			$this->gbookView->Set('posts', $posts);
			return $this->gbookView->show();
		}
	}
?>



Ich habe hier die "save" mehtode bewusst weggelassen, da dies meiner Meinung nach zuweit geht für ein "kleines" Tutorial.
Im __construct() include ich die Model- und die Viewklasse und erzeuge ein Objekt davon.
In der IndexAction hole ich mir mittels gbockModel->getPosts(); alle Einträge des Gästebuches und schütte diese auf das View.

3.3 Views

Jetzt brauchen wir noch eine Viewklasse, die der Controller verwenden kann.
<?php
	class gbookView {
		private $PH = array();
		private $template;
    
		public function __construct($tpl) {
			$this->template = $tpl;
		}
    
		public function Set($key, $value) {
			$this->PH[$key] = $value;
		}
    
		public function show() {
			ob_start();    
			$template = 'views/'. $this->template . '.phtml';        

			include $template;        
			$view = ob_get_clean();
			return $view;
		}
	}
?>



Eigentlich ganz simple.. Im Konstruktor setzen wir das gewünschte Template, bzw die gewünschte html-Datei die wir benutzen wollen.
Die Methode Set ist wahrscheinlich selbsterklärend: $key wird der Platzhalter den wir setzen wollen und $value ist der Wert den es bekommt.
Die Methode Show verarbeitet die .phtml Datei und schüttet sie aus.

3.4 Templatedateien
Templatedateien sind die Ansicht, die wir haben wollen. Dort könnt ihr PHP und HTML Code zur Darstellung eures Gästebuches benutzen.
Ein Beispiel für unser Projekt wäre:
	<table border="0">
	<?php foreach ($this->posts as $entry) : ?>
		<tr>
		<td><?php echo $entry['name']; ?></td>
		</tr>
		<tr>	
		<td><?php echo $entry['message']; ?></td>
		</tr>
	<?php endforeach; ?>
	</table>




3.5 Index (bootstrapdatei)
Jeder kennt sie, die allzeit beliebte index.php auch genannt "bootstrapdatei".
In dieser wählen wir den Controller aus den wir verwenden wollen:

<?php
	$contoller = "controller/gbook.php";
	require($controller);

	$c = new gbookController();
	$c->indecAction();
?>



Den Controller habe ich beachsichtigt so abgespeckt gehalten.
Natürlich dürfen dort sicherheitsprüfungen auf existens der Dateien etc nicht fehlen.
Man kann Controller und Aktion auch per URL auswählen, dazu aber wann anders mehr.

4. Schlusswort
So, dazu muss ich sagen, dass ich davon nichts getestet hab, weil mir die Zeit fehlt.
Sollte aber alles funktionieren, ihr könnt das Ganze natürlich verwenden, aber bitte die Sicherheitsprüfungen nicht vergessen!
Falls erwünscht, kann ich auch noch etwas tiefer in die Materie einsteigen.
MVC Tutorial
<?php
	echo "Liebe Grüße FenKeN";
?>
1

Anzeige



Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0