Versionen im Vergleich

Schlüssel

  • Diese Zeile wurde hinzugefügt.
  • Diese Zeile wurde entfernt.
  • Formatierung wurde geändert.

...

Ein Controller ist eine Methode in einer Controller-Klasse.

Beispiel
Codeblock
title
languagephpBeispiel
class Engine extends Controller\ControllerEngineAbstract {

    /**
     * @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.

...

Es gibt unterschiedliche Möglichkeiten auf fremde Plugins und dessen Controller zuzugreifen. 

Statischer Zugriff
code
Codeblock
languagephptitleStatischer Zugriff
public function abc() { 
  $this->staticAppController(foreign\engine::class)->something();
}
languagephp
title


Zugriff mit neuer Controller-Instanz
Codeblock
languagephp
public function abc() { 
  $this->newAppController(foreign\engine::class)->something();
}
Codeblock
languagephp
title


Zugriff auf erstes Feature über Hook-System
php
Codeblock
languagephp
public function abc() { 
  $result = $this
    ->main(foreign\engine::class)
    ->first()
    ->sendResponse()
    ->validateCsrf()
    ->validateRights()
    ->getResult($params, [])
  ;
}
Codeblock
language
title


Zugriff auf alle Features über Hook-System
Codeblock
languagephp
public function abc() { 
  $result = $this
    ->main(foreign\engine::class)
    ->collectAll()
    ->sendResponse()
    ->validateCsrf()
    ->validateRights()
    ->getResult($params, [])
  ;
}


Erstellen eines Hooks
Codeblock
languagephp
titleErstellen eines Hooks
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
languagephpthemeRDark
/**
  * @filename entrypoints/index
  */
public function index($max) {}


Codeblock
languagexml
themeRDark
<div>
  {{max}}
</div>

Rollen & Rechte

...

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
languagephptitleNachricht in View verarbeiten
$sessionRequest= session\request::get();
$sessionRequest->setValue('foo', $foo);

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

...