Routing
Als Standardrouter bringt hubert den AltoRouter mit.
Eine Route
$config = array(
"routes" => array(
"hello" => array(
"route" => "/hello[/]",
"method" => "GET"
"target" => function($request, $response, $args){
echo "Hello-Route";
}
)
)
);
Jede Route musss einen eindeutigen Namen haben, Im Beispiel ist dies hello. Eine Route kann aus drei Bestandteilen bestehen:
- "route" definiert die Uri
- "method" (optional) definiert, für welche Request-Typen die Route gilt. Es können mehrere Typen per | kombiniert angegeben werden. Der Standardwert ist "GET|POST"
- "target" definiert, was passieren soll, wenn die Route auf den Request zutrifft
Route-Matching
Feste Routen werden nur ausgeführt, wenn diese exakt auf die Request Uri zutreffen:
$config = array(
"routes" => array(
"home" => array(
"route" => "/",
"target" => function($request, $response, $args){
echo "Hello World";
}
),
"hello" => array(
"route" => "/hello",
"target" => function($request, $response, $args){
echo "Hello-Route";
}
)
)
);
Die Route "hello" trifft nur auf "/hello" zu, nicht auf "/hello/". Mann könnte "route" => "/hello/" verwenden, damit die Route zutrifft, wenn ein Slash am Ende steht, oder über [/]? am Ende der Route den letzten Slash optionalisieren:
$config = array(
"routes" => array(
"hello" => array(
"route" => "/hello[/]?",
"target" => function($request, $response, $args){
echo "Hello-Route";
}
)
)
);
Parameter in der Route sehen wie folgt aus:
"mvc" => array(
"route" => "/[:controller]/[:action]",
"method" => "GET|POST",
"target" => function($request, $response, $args){
echo "Controller: {$args['controller']}, Action: {$args['action']}";
}
),
Optionale Parameter enden auf "?"
"mvc" => array(
"route" => "/[:controller]/[:action]?",
"method" => "GET|POST",
"target" => function($request, $response, $args){
echo empty($args["action"]) ? "index" : $args["action"];
}
),
Weitere Informationen findest du auf altorouter.com
Urls bilden
$base = hubert()->router->getBasePath();
$url_home = hubert()->router->get("home");
$mvc_url = hubert()->router->get("mvc", ["controller" => "index", "action" => "index"])
Der Router bietet die Funktion getBasePath(), welche die Basis-Url der Anwendung liefert. Des Weiteren gibt es die Funktion get($name, $params = array(), $query = array()), über welche man Urls zu definierten Routen bilden kann.