Controller in Ihrem eigenen MVC-Framework in PHP
Wie Sie bereits wissen, haben alle Controller unseres
Frameworks die Methode render, die
aufgerufen werden muss, um Daten an die View zu senden.
Diese Methode erben unsere benutzerdefinierten Controller
von der Elternklasse Controller,
die sich im Kern befindet. Lassen Sie uns diese Klasse erstellen:
<?php
namespace Core;
class Controller
{
protected function render($view, $data) {
}
}
?>
Wie Sie sehen, akzeptiert die Methode render als Parameter
den Namen der View und die Daten für
die Anzeige. Lassen Sie diese Methode ein
Objekt der speziellen Klasse Page zurückgeben, in
der die Informationen über die Darstellung
der Daten der Controller-Action enthalten sein werden. In dieser Klasse
werden der Name der View, die Daten,
sowie der Seitentitel und der Dateiname des Layouts
der Website enthalten sein:
<?php
namespace Core;
class Page
{
private $layout;
private $title;
private $view;
private $data;
public function __construct($layout, $title, $view, $data)
{
$this->layout = $layout;
$this->title = $title;
$this->view = $view;
$this->data = $data;
}
public function __get($property)
{
return $this->$property;
}
}
?>
Dann wird der Code unserer Methode render
so aussehen:
<?php
namespace Core;
class Controller
{
protected $layout = 'default';
protected function render($view, $data) {
return new Page($this->layout, $this->title, $view, $data);
}
}
?>
Ich erkläre, was hier passiert. Der Name der View
und die Daten kommen als Parameter der Methode.
Allerdings wird im benutzerdefinierten Controller noch
der Seitentitel festgelegt - durch das Setzen der Eigenschaft
title. Das bedeutet, dass in $this->title
der Titel enthalten sein wird, den wir an den
Konstruktor der Klasse Page übergeben.
Es gibt auch Nuancen beim Layout. Wie Sie wissen,
verwendet unser Framework das Layout aus der Datei
default.php. Tatsächlich kann jede
Action ein anderes Layout haben. Dafür
muss in der Action selbst in die Eigenschaft layout
ein anderer Layoutname geschrieben werden.
Wie das erreicht wird: Unser übergeordneter Controller
hat die Eigenschaft layout, die standardmäßig
den Wert 'default.php' hat. Dies
wird das Standard-Layout sein. Wenn jedoch
die Action des benutzerdefinierten Controllers den
Wert der Eigenschaft layout überschreibt, dann wird auch das Layout
ein anderes sein.
Kopieren Sie den Code meiner Klasse Controller und platzieren Sie ihn in der Datei
/core/Controller.php.
Kopieren Sie den Code meiner Klasse Page und
platzieren Sie ihn in der Datei /core/Page.php.