Zum Ende der Metadaten springen
Zum Anfang der Metadaten

Sie zeigen eine alte Version dieser Seite an. Zeigen Sie die aktuelle Version an.

Unterschiede anzeigen Seitenhistorie anzeigen

« Vorherige Version anzeigen Version 3 Nächste Version anzeigen »

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.

Beispiel
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 Typ int 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. 

Statischer Zugriff
public function abc() { 
  $this->staticAppController(foreign\engine::class)->something();
}
Zugriff mit neuer Controller-Instanz
public function abc() { 
  $this->newAppController(foreign\engine::class)->something();
}
Zugriff auf erstes Feature über Hook-System
public function abc() { 
  $result = $this
    ->main(foreign\engine::class)
    ->first()
    ->sendResponse()
    ->validateCsrf()
    ->validateRights()
    ->getResult($params, [])
  ;
}
Zugriff auf alle Features über Hook-System
public function abc() { 
  $result = $this
    ->main(foreign\engine::class)
    ->collectAll()
    ->sendResponse()
    ->validateCsrf()
    ->validateRights()
    ->getResult($params, [])
  ;
}
Erstellen eines Hooks
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.

Nachricht in View verarbeiten
$sessionRequest= session\request::get();
$sessionRequest->setValue('foo', $foo);

$foo = $sessionRequest->getString('foo');

Weiterlesen unter Sitzungsdaten und Behandlung von Abfragen

  • Keine Stichwörter