...
Ein Controller ist eine Methode in einer Controller-Klasse.
Beispiel
Codeblock | ||||
---|---|---|---|---|
| ||||
namespace brandbox\component\example { use brandbox\component\http; class engineEngine extends pluginController\lib\engineAbstractControllerEngineAbstract { /** * @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.
...
Es gibt unterschiedliche Möglichkeiten auf fremde Plugins und dessen Controller zuzugreifen.
Statischer Zugriff
Codeblock | ||||
---|---|---|---|---|
| ||||
public function abc() { $this->staticAppController(foreign\engine::class)->something(); } | ||||
Codeblock | ||||
language | phptitle |
Zugriff mit neuer Controller-Instanz
Codeblock | ||
---|---|---|
| ||
public function abc() { $this->newAppController(foreign\engine::class)->something(); } | ||
Codeblock | ||
language | php |
Zugriff auf erstes Feature über Hook-System
Codeblock | ||
---|---|---|
| ||
public function abc() { $result = $this ->main(foreign\engine::class) ->first() ->sendResponse() ->validateCsrf() ->validateRights() ->getResult($params, []) ; } | ||
Codeblock | ||
language | php |
Zugriff auf alle Features über Hook-System
Codeblock | ||
---|---|---|
| ||
public function abc() { $result = $this ->main(foreign\engine::class) ->collectAll() ->sendResponse() ->validateCsrf() ->validateRights() ->getResult($params, []) ; } |
Erstellen eines Hooks
Codeblock | ||||
---|---|---|---|---|
| ||||
public function abc() { $result = $this ->makeHookable(foreign\engine::class) ->something() ; } |
...
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.
Codeblock | ||||
---|---|---|---|---|
| ||||
/** * @filename entrypoints/index */ public function index($max) {} |
Codeblock | ||||
---|---|---|---|---|
| ||||
<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.
Nachricht in View verarbeiten
Codeblock | ||||||
---|---|---|---|---|---|---|
| ||||||
$sessionRequest= session\request::get(); $sessionRequest->setValue('foo', $foo); $foo = $sessionRequest->getString('foo'); |
...