Subsysteme

Controller

Du kannst deine Web-Applikation in mehrere Subsysteme unterteilen, für welche du jeweils eigene Controller definieren kannst. Dies ist zum Beispiel nützlich, wenn deine Web-Applikation mehrere Domains umfasst.

  1. Subsysteme konfigurieren
  2. Controller für Subsysteme
  3. Lokales testen
  4. Subsystem erzwingen

Subsysteme konfigurieren

Subsysteme kannst du in der app.inikonfigurieren. Als Kriterien sind Hostname und Applikations-Kontextpfad (URL-Pfad zu n2n-public) verfügbar:

[routing-foo]

host = "www.example.com"


[routing-bar]

host = "n2n.rocks"

In diesem Beispiel haben wir die zwei Subsysteme "foo" und "bar" definiert. Je nachdem, ob die Web-Applikation über www.example.com oder n2n.rocks aufgerufen wird, ist das Subsystem "foo" oder "bar" aktiv. Wird deine Web-Applikation über eine andere Domain aufgerufen, ist kein Subsystem aktiv. 

Mit dem Applikations-Kontextpfad als Kriterium kannst du Subsysteme weiter einschränken:

[routing-foo]

host = "www.example.com"
context_path = "/"


[routing-bar]

host = "n2n.rocks"
context_path = "/public1"


[routing-baz]

host = "n2n.rocks"
context_path = "/public2"

Über n2n\http\Request::getSubsystem() kannst du das aktuelle Subsystem abfragen.

Controller für Subsysteme

Für Subsysteme lassen sich eigene Controller definieren:

[routing]

controllers[] = "/notexample > atusch\controller\NotExampleController"
controllers[] = "/example > atusch\controller\ExampleController"


[routing-foo]

controllers[] = "/example > atusch\controller\FooExampleController"


[routing-bar]

controllers[] = "/example > atusch\controller\BarExampleController"

Ist kein Subsystem aktiv, wird beim Aufruf von http://.../example der ExampleController ausgeführt. Ist das Subsystem "foo" oder "bar" aktiv, wird er aber von FooExampleController oder BarExampleController überschrieben. NotExampleController ist dagegen immer aufrufbar, unabhängig davon, welches Subsystem aktiv ist.

Lokales testen

Um Subsysteme mit Hostnamen auf der lokalen Maschine zu testen, kannst du für den Development-Modus alternative Hostnamen definieren:

[http : development]

subsystems.foo.host = "localhost.example.com"
subsystems.bar.host = "localhost.n2n.rocks"

Nun kannst du dem DNS-Server für diese Domains A-Records mit der IP 127.0.0.1 hinzufügen. Alternativ fügst du diese Hostnamen einfach im Hosts-File deines Betriebssystems hinzu (Windows: C:\Windows\System32\drivers\etc, Mac OS: /private/etc/hosts, Linux: /etc/hosts):

127.0.0.1    localhost.example.com
127.0.0.1    localhost.n2n.rocks

Nun kannst du den Localhost über localhost.example.com oder localhost.n2n.rocks aufrufen.

Subsystem erzwingen

Im index.php des n2ns findest du die Anweisung n2n\N2N::autoInvokeControllers();. Diese führt die Controller aus, ermittelt das Subsystem aber selbst. Nutzt du stattdessen invokeControllers(), kannst du das aktive Subystem selbst bestimmen:

n2n\N2N::invokeControllers('foo');

Übergibst du keinen Subsystemnamen oder null, ist kein Subsystem aktiv.

« Filter Murl »

comments_title

post_login_to_create

questions_title