Ein Controller ist eine von Ihnen erstellte PHP-Funktion, die Informationen aus dem Request-Objekt liest und ein Response-Objekt erstellt und zurückgibt. Die Antwort kann eine HTML-Seite, JSON, XML, ein Dateidownload, eine Weiterleitung, ein 404-Fehler oder etwas anderes sein, das Sie sich ausdenken können. Der Controller führt jede beliebige Logik aus, die Ihre Anwendung benötigt, um den Inhalt einer Seite zu rendern.
Ein einfacher Basis-Controller
Ein Controller ist eine Methode in einer Controller-Klasse.
namespace brandbox\component\example { use brandbox\component\http; class engine extends plugin\lib\engineAbstract { /** * @param int $max * @return array */ public function index($max) { return $this ->staticAppController(ui\lib\request\index::class) ->request($max) ; } /** * @param int $max * @return http\respondAbstract */ public function save($max) { return $this ->staticAppController(ui\lib\execute\save::class) ->execute($max) ; } } }
Der Controller ist die index()
Methode, die in der Controller-Klasse brandbox\component\example\engine
lebt.
Dieser Controller ist ziemlich einfach:
- Zeile 1: Brandbox nutzt die Namespace-Funktionalität von PHP, um die gesamte Controller-Klasse mit einem Namespace auszustatten.
- Zeile 3: Brandbox nutzt wieder die PHP-Namespace-Funktionalität: Das
use
-Schlüsselwort importiert die Response-Klasse, die der Controller zurückgeben muss. - Zeile 5: Die Klasse heißt immer engine.
- Zeile 11: Die Methode darf ein
$max
Argument haben, da im DocBlock ein Parameter vom Typint
beschrieben wurde. - Zeile 12: Der Controller erzeugt ein
respond\*
Objekt.
Die Basis-Controller-Klasse (engine.php) soll ausschließlich Referenzen auf Kind-Controller-Klassen enthalten. Diese Vorgehensweise dient der Übersichtlichkeit und sorgt für eine strukturierte Gruppierung von Features. Die Kind-Contoller enthalten die Geschäftslogik und verknüpfen zu den abhängigen Plugins.
Programmablauf
Es gibt unterschiedliche Möglichkeiten auf fremde Plugins und dessen Controller zuzugreifen.
public function abc() { $this->staticAppController(foreign\engine::class)->something(); }
public function abc() { $this->newAppController(foreign\engine::class)->something(); }
public function abc() { $result = $this ->main(foreign\engine::class) ->first() ->sendResponse() ->validateCsrf() ->validateRights() ->getResult($params, []) ; }
public function abc() { $result = $this ->main(foreign\engine::class) ->collectAll() ->sendResponse() ->validateCsrf() ->validateRights() ->getResult($params, []) ; }
public function abc() { $result = $this ->makeHookable(foreign\engine::class) ->something() ; }
Mapping von HTTP-Parametern
Lesen Sie bei Routing weiter.
Rendern von Views
Views sind Templates, die einen direkten Bezug zu den Request-Controllern haben. Um ein View zu rendern, legen Sie es im Ordner views/
ab und nennen es so wie die Methode im Basis-Controller heißt. Im obigen Beispiel views/index.hbs
Bei Controllern, die per lowerCamelCase benannt sind, ergibt sich für das View eine Ordner-Struktur die sich am Namen orientiert. Hier lower/camel/case.hbs
Es kann notwendig werden werden, Views in Ordnern zu gruppieren, die nicht mit den Controllern korrespondieren. In diesem Fall ergänzen Sie beim Controller in der Basis-Controller-Klasse die Annotation @filename
und referenzieren den Pfad zum View. Der Ordner views/
sowie das Suffix .hbs
werden dabei nicht angegeben.
/** * @filename entrypoints/index */ public function index($max) {}
<div> {{max}} </div>
Rollen & Rechte
Lesen Sie bei Rollen & Rechte weiter.
Verwalten der Session
Brandbox stellt einen Session-Service bereit, mit dem Sie Informationen über den Benutzer zwischen den Requests speichern können. Bitte beachten Sie, dass Anwender-Informationen nicht direkt über die Session bezogen werden dürfen. Dafür verwenden Sie bitte die Application-Methoden, die eingangs beschrieben wurden.
$sessionRequest= session\request::get(); $sessionRequest->setValue('foo', $foo); $foo = $sessionRequest->getString('foo');
Weiterlesen unter Sitzungsdaten und Behandlung von Abfragen