dakata__92
Super Moderator
Колеги, помогнете ми да уeднаквя добавяните адреси с тези които трябва да търся в този клас. Ще дам и примерите.
Примери:
PHP:
<?php
namespace user\router;
class Route{
private $allowedMethods = array("ANY", "GET", "HEAD", "POST", "PUT");
private $routesTree = array();
public function __construct(){
}
public function addRoute($method,$route,$action){
$method = strtoupper(trim($method));
if(in_array($method,$this->allowedMethods)){
if($method == "ANY"){
$method = array_diff($this->allowedMethods,array($method));
}
$this->routesTree[] = array(
"method" => $method,
"route" => strtolower(trim($route)),
"action" => $action
);
}else{
throw new \Exception("Method (".$method.") is not allowed!", 500);
}
}
public function findRoute($method,$uri){
$method = strtoupper(trim($method));
$uri = strtolower(trim($uri));
foreach($this->routesTree as $route){
if($route["route"] == $uri){
switch($method){
case $route["method"]:
return $route;
break;
case is_array($route["method"]) and in_array($method,$route["method"]):
return $route;
break;
default: throw new \Exception("Method $method on this route $uri is not allowed!", 500);
}
}
}
}
public function getRoutesTree(){
return $this->routesTree;
}
}
Примери:
PHP:
$r = new \user\router\Route();
$r->addRoute('get', '/', new stdClass());
$r->addRoute('get', '/id', 'home-id');
$r->addRoute('get', '/?test=proba', 'home-opt-id');
$r->addRoute('get', '/user', 'user');
$r->addRoute('post', '/user/?id=2', 'user-id');
$r->addRoute('post', '/user/id', 'user-id-post');
$r->addRoute('any', '/user/id/edit', 'user-id-edit');
$r->addRoute('get', '/user/id/name/group/ord', 'user-id-name-group-opt-ord');
print "<br>";
$f = $r->findRoute($_SERVER["REQUEST_METHOD"],$_SERVER["QUERY_STRING"]);
print_r($f);
print_r($r->getRoutesTree());