Frage zu MVC in PHP

TheDirtyPenguin

Grünschnabel
Moin,

momentan beschäftige ich mich mit dem MVC-Entwurfsmuster. Da ich noch relativ neu in PHP bin, verstehe ich es nicht so recht. Im Internet werden auch verschiedene Arten der Implementierung gezeigt. Die objektorientierte Programmierung fällt mir noch sehr schwer.

Wie wird es grob in PHP geschrieben?

Hier einmal meine Interpretation von MVC in PHP:

PHP:
Class Controller {
private $model;
private $view;

public function __construct(Model $model, View $view) {
$this->model = $model;
$this->view = $view;
}

}

Der Controller hält alles zusammen. Meine Frage hierzu wäre nun, ob sich in dem Controller auch Logik abspielt, oder ob er nur sozusagen als "Container" dient?

PHP:
Class View {
private $model;

public function __construct(Model $model) {
$this->model = $model;
}

public function output() {
return '<p>'.$this->model->string().'</p>';
}
}

Ich weiß, dass es keine Template-Engine oder ähnliches beinhaltet. Es soll erst einmal nur sich um das grobe Verständnis von PHP drehen. Ich habe leider noch nicht ganz verstanden, wie alles zusammenhängt. Wie arbeiten sie alle zusammen? Gibt es eine Musterlösung für MVC in PHP?

PHP:
Class Model {
private $string;

public function string() {
echo $string = 'Hallo';
}
}

Alles würde ich dann mit einer index.php als Einstiegspunkt verbinden wollen. Hier einmal den Code, den ich dazu noch geschrieben habe:

PHP:
include 'model.php';
include 'view.php';
include 'controller.php';

$model = new Model();
$view = new View($model);
$controller = new Controller($model, $view);

echo $view->output();

Wie würde sich das MVC-Muster mit mehreren Klassen verhalten? Müssen die auch alle irgendwie zusammenhängen? Bei mehreren Models z.B. fällt es mir noch schwer umzudenken.

Leider habe ich viele Fragen. Vielleicht möchte jemand mir helfen - das kann er dann entweder hier im Forum oder über Nachrichten tun!

Der Code ist lauffähig, aber ich habe es wie gesagt noch nicht ganz verstanden, wie man genau das MVC-Konzept in PHP umsetzt. Den Code habe ich selber geschrieben (zu testzwecken).

Ich danke schon einmal im Vorraus für die Hilfe!

Liebe Grüße,

TheDirtyPenguin
 
Zuletzt bearbeitet:
Hallo,

erst einmal: Danke, dass du deinen Code einzurücken versuchst, dies geht hier aber nur mit Leerzeichen oder Tabs und nicht mit [INDENT].

Der Controller hält alles zusammen. Meine Frage hierzu wäre nun, ob sich in dem Controller auch Logik abspielt, oder ob er nur sozusagen als "Container" dient?
Der Controller enthält in der Tat die Businesslogik. Aus dem gleichen Grund solltest du davon absehen, deiner View eine Model-Instanz zu übergeben. Das würde nämlich zur Folge haben, dass sich die View um die Daten kümmern muss, die es braucht. Nicht nur ist dies unflexibel (man kann eine View für verschiedene Arten von Daten z. B. benutzen), sondern auch nicht dem MVC-Prinzip getreu: Die View gibt stupide die Daten formatiert aus.

Eine Musterlösung im Sinne von nützlichem, weit verbreitetem Code findet sich in vielen Frameworks.
Vielleicht hilft dir eine alte Zeichnung von mir weiter :D
http://stackoverflow.com/a/12138988/603003

Deine index.php ist momentan noch sehr unflexibel. Fast in allen Frameworks gibt es so etwas wie einen Router. Der Router wird vom Einstiegspunkt ("Bootstrapping") aus aufgerufen. Der Router entnimmt nun aus der URL (z. B. example.com/companies/show/3) den Controller-Namen (Company*), die Methode/"Action" (show) und mögliche weitere Parameter (z. B. die Company-ID 3).

* In CakePHP formt bspw. der "Inflector" automatisch Plural- in Singularformen um.
 
Zuletzt bearbeitet von einem Moderator:
Danke schön für deine Antwort! Du hast mir schon ein wenig weiter geholfen. Ich finde es ärgerlich, dass es im Internet nicht die gewünschten Informationen gibt. Jeder sagt irgendwie was anderes.
 
MVC ist ein Entwurfsmuster. Es gibt einen groben Rahmen, in dem einige Implementierungen frei interpretieren, wie es denn auszusehen hat. Es wird keine Projekt-Struktur vorgegeben, noch wie Klassen anzuordnen sind. Mir hat als Einstieg in MVC anno-dazumal das Tutorial von Ralf Eggert zum Zend-Framework sehr geholfen. Ist zwar schon etwas in die Tage gekommen, aber ich denke, ein paar Ideen kannst du dir da durchaus holen:

http://www.zendframeworkmagazin.de/zf/tutorial/einstieg-ins-zend-framework-1-teil-1

Es gibt nicht DIE MVC-Implementierung. Nur sehr viele (gute) Interpretationen des Design-Patterns.
 
Zurück