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

Version 1 Nächste Version anzeigen »

Mapping von HTTP-Parametern

Alle Controller erhalten automatisch alle eingehenden HTTP-Parameter (GET und POST). Die Werte werden anhand des Namens auf die Signatur gemapped. Dabei ist zu beachten, dass die Annotations korrekte Typisierungen enthalten. 

/**
  * @param int $max
  */
public function index($max) {
  echo $max;
}

// admin?max=string
// ...gibt 0 aus

// admin?max=5
// ...gibt 5 aus

CSRF-Tokens beachten

CSRF-Tokens werden beim Laden einer Seite generiert und werden bei Ajax-POST-Requests automatisch an jeden Request gehängt. Ohne eine gültigen CSRF-Token wird der Execute-Controller nicht ausgeführt. Lesen Sie hier mehr.

Wie kann ich auf Features in anderen Plugins zugreifen?

Um Zugriff auf fremde Plugins zu erhalten bieten die Controller-Abstracts zwei Methoden, die wir nachfolgend näher beschreiben.

Benennung von Requests

Bei Methoden, die per lowerCamelCase benannt sind, ergibt sich für den HTTP-Request eine Notation die sich an Pfaden  orientiert. Hier: lower/camel/case Wird dies nicht beachtet kommt es womöglich zu Fehlern bei der Verarbeitung von Rollen & Rechten.

getAppFactory()

Mit dieser Methode stellen Sie eine indirekte Verbindung zu einer anderen Controller-Klasse her. Das Objekt wird automatisch instanziiert. Man hat anschließend Zugriff auf alle Methoden dieses Objekts.

    /**
     * @param int $max
     * @return array
     */
    public function index($max) {
      return $this
        ->getAppFactory(ui\lib\request\index::class)
        ->request($max)
      ;
    }

getAppLoose()

Aufbau
// Controller der eine Methode zur Verfügung stellt
namespace brandbox\component\foreign {

  use brandbox\component\http;

  class engine extends plugin\lib\engineAbstract {
    public function foreignMethod($max) {
      return ['max' => $max];
    }
  }
}

// Controller der Rückgabewert der Methode erweitert
namespace brandbox\component\overlay {

  use brandbox\component\http;

  class engine extends plugin\lib\engineAbstract {

    /**
     * @plugin component/foreign
     * @priority 100
     */
    public function foreignMethod($max) {
      return ['max' => $max, 'min' => 1];
    }
  }
}

Aufruf per View

{{{features 'component/foreign.foreign/method' serve}}}


Integration per Controller (Methode)

namespace brandbox\component\example {

  use brandbox\component\http;
  use brandbox\component\foreign;

  class engine extends plugin\lib\engineAbstract {

    public function initiateLoose($max) {

      $engine = $this->getAppLoose(foreign\engine::class);
      $engine->setCallSendRequest(false);
      $engine->setUseFullChain(true);
      $engine->setParseHtml(false);
      $result = $engine->foreignMethod($max);

      // Gibt beide Werte aus:
      // $result['serve']['max'];
      // $result['serve']['min'];
    }
  }
}

Mit einer losen Kopplung erreichen wir zwei mögliche Ziele:

Hook

Ein Hook kann hilfreich sein, um Funktionen an einer Stelle im Plugin anzureichern, die nicht von diesem Plugin bereitgestellt werden sollen. Hooks werden über den Namen der Methode kenntlich gemacht. 

namespace brandbox\component\example {

  use brandbox\component\http;
  use brandbox\component\foreign;

  class engine extends plugin\lib\engineAbstract {

    public function callHook() {
      $engine = $this->getAppLoose(self::class);
      $engine->setCallSendRequest(false);
      $engine->setUseFullChain(true);
      $engine->setParseHtml(false);

      $engine->hookComponentExampleSelfMethod();
    }

    public function hookComponentExampleSelfMethod() {}
  }
}


Verkettung von Responses eines Requests
Es ist möglich, eine Methode zu registrieren, die von anderen Plugins lose überschrieben werden kann. Dadurch ist es möglich eine Sequenz zu erzeugen, die in einer definierten Reihenfolge abgearbeitet wird. Siehe Beispiele weiter oben.

  • Keine Stichwörter