set_routes -> Который будет записывать список маршрутов;
url_for -> Будет смотреть есть ли в массиве routes маршрут с нужным именем и параметрами и возвращать url.
is_match -> Который должен определить соответствует текущий REQUEST_URI какому либо элементу массива routes. Вообщем проблема именно в реализации этого метода. Вот пример набросанного мною класса Router.
index.php
include_once 'Router.php';
$route_obj = new Router();
$route_obj->setRoute('home',array('url'=>'home/index/:name{string}/:age{integer}','controller'=>'Home','action'=>'Index'));
//генерируем url по имени маршрута
echo $route_obj->url_for('home',array('name'=>'slava','age'=>22));
//должно вернуть имя controller and action
$route_obj->is_match($route_obj->url_for('home',array('name'=>'slava','age'=>22)));
Router.php
class Router
{
protected $routes = array();
public function setRoute($name,$controller_params){
$this->routes[$name] = $controller_params;
}
public function url_for($name,$params = null){
if(isset($this->routes[$name])){
$url = $this->routes[$name]['url'];
preg_match_all('/\/:(.+?){(.+?)}/',$url,$match,PREG_SET_ORDER);
foreach($match as $key=>$route_params){
if(isset($params[$route_params[1]]) && gettype($params[$route_params[1]]) == $route_params[2]){
$url = preg_replace('/:'.$route_params[1].'{'.$route_params[2].'}/',$params[$route_params[1]],$url);
}
else{
var_dump('fe');
}
}
return $url;
}else{
var_dump('no route');
}
}
public function is_match($url){
//Как правильно реализовать структуру этого метода. Что бы было красиво и не было похоже на быдло кодинг.
}
}
Прошу на править меня в правильное русло. Буду признателен за любую идею и мысли в данном вопросе