Routing

Routen können aus dem Netzwerk aufgerufen werden. Sie verlinken auf eine Funktion, die im Folgenden die Anfrage verarbeitet und eine entsprechende Rückgabe erzeugt, die dann im Browser angezeigt wird oder durch ein Script verarbeitet werden kann.

Modul registrieren

Module sollten vor der Verwendung ordnungsgemäß in dem System registriert werden. Dies ermöglicht die Prüfung des aktuellen Status und stellt sicher, dass ein Modul nicht 2x installiert wird.

<?php
/* Add Module To Module-List */
$moduleModel = new Module_model();
if (!$moduleModel->inDb('Sample')) {
    $moduleModel->addModuleToDb('Sample', 1);
}

Soll das Modul komplett ausgeschaltet werden, wenn es nach der Registrierung vom Administrator deaktiviert wird, kann eine entsprechende Prüfung vorgenommen werden, die alle Routen umschließt.

<?php
/* Routes */
if ($moduleModel->isEnabled('Sample')) {

}

Ein vollständiges Beispiel eines Moduls inkl. Registrierung ist am Ende dieser Seite zu finden.

Route definieren

Die HTTP Request Methode definiert, welche Art von Anfrage (GET, POST, usw.) die Route akzeptiert. Zur Verfügung stehen GET (Router::get) und POST (Router::post). Soll die Art der Anfrage nicht definiert werden, so kann eine Wildcard für die Route gesetzt werden, die alle Anfragen akzeptiert (Router::any).

Als erstes Argument wird der Pfad übergeben. Steuert ein Benutzer diesen Pfad an, so wird die angegebene Methode des Controllers ausgeführt. Eine Route kann durch die Angabe von Zahlen ((:num)) oder alphanumerischem Text ((:any)) dynamisch gestaltet werden. Die Werte der Platzhalter werden in exakter Reihenfolge in die Argumente der angesteuerten Methode übergeben und können so in der Controller-Instanz verwendet werden. Standardmäßig werden die Werte durch den nächsten / in der URL beendet. Wünschen Sie dies nicht, verwenden Sie (:all). Diese Angabe weißt den Router dazu an, alle folgenden Zeichen einzulesen, ohne den Delimiter zu beachten.

Das zweite Argument gibt den Pfad der Kasse inkl. Namespace Definition gem. PSR-4 Standard, gefolgt von einem @ und dem Methoden-Namen in der Klasse an. Die Methode muss das Access-Level public besitzen, damit der Router sie korrekt laden kann.

modul_name.module.php

<?php

use Core\Router;
use Models\Module_model;

/* Add Module To Module-List */
$moduleModel = new Module_model();
if (!$moduleModel->inDb('Payment')) {
    $moduleModel->addModuleToDb('Payment', 1);
}

/* Routes */
if ($moduleModel->isEnabled('Sample')) {
    Router::any('sample', 'Modules\module_name\Controllers\[email protected]_any');
    Router::get('sample/(:any)', 'Modules\module_name\Controllers\[email protected]_get');
    Router::post('sample/post', 'Modules\module_name\Controllers\[email protected]_post');
}